- Set NPM_CONFIG_REGISTRY and NPM_REGISTRY environment variables to force GitHub Packages
- Remove registry setting from semantic-release config to rely on environment variables
- This should force npm authentication to use GitHub Packages registry instead of npm
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove npm registry plugin to eliminate NPM_TOKEN requirement completely
- Configure single npm plugin targeting only GitHub Packages registry
- This should allow successful publishing to GitHub Packages with GITHUB_TOKEN
- npm publishing can be re-enabled later by adding NPM_TOKEN secret
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Disable npm registry publishing in semantic-release config to avoid NPM_TOKEN requirement
- Enable GitHub Packages publishing with GITHUB_TOKEN authentication
- Update workflow to configure only GitHub Packages registry authentication
- Allow package publishing to GitHub Packages without npm credentials
- This enables automatic publishing to GitHub Packages while npm setup is pending
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move calculateOptimalGrid function outside useGridDimensions hook
- Fix function scoping issue that caused ReferenceError during useState initialization
- Add safety check for window object in helper function
- Grid layout now properly initializes without runtime errors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace dynamic column calculation with proper grid dimensions that respect total card count
- Calculate exact rows and columns needed for balanced grid layout
- Add grid balancing logic to avoid uneven bottom rows when possible
- Update grid configuration for 12-pair difficulty to use 6×4 layout consistently
- Fix wide screen issue where cards were distributed as 8+4 instead of proper grid
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add semantic-release configuration for abacus-react package with scope-based versioning
- Create GitHub Actions workflow for automated publishing to npm
- Configure package-specific semantic versioning with conventional commits
- Add release scripts and update README with publishing documentation
- Update root release config to exclude abacus-react scope from monorepo releases
- Package releases are triggered by commits with scope 'abacus-react'
BREAKING CHANGE: abacus-react package now has independent versioning from monorepo
- Add comprehensive GitHub Actions workflow for automated Storybook deployments
- Deploy apps/web Storybook to gh-pages/web subdirectory
- Deploy packages/abacus-react Storybook to gh-pages/abacus-react subdirectory
- Create beautiful landing page with navigation to both Storybooks
- Add Component Documentation section to README with direct links
- Support both PR previews and main branch deployments
- Optimize build process with proper dependency management
- Add comprehensive console logging for debugging fullscreen operations
- Improve error handling with detailed error messages
- Enhanced element registration tracking for better visibility
- Support for debugging fullscreen element switching between components
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Document proper Next.js router usage vs window.location.href
- Establish clear rules for navigation and fullscreen state management
- Include code review checklist and migration guide
- Prevent future instances of page reload navigation mistakes
- Emphasize performance and state preservation benefits
Key rules:
- ALWAYS use useRouter().push() for navigation
- NEVER use window.location.href (breaks state, exits fullscreen)
- Manual fullscreen entry only (respect browser security)
- Let client-side navigation preserve fullscreen automatically
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace window.location.href with useRouter().push() across all components
- Prevents page reloads that break fullscreen state and React context
- Enables proper client-side navigation as intended by Next.js
- Fixes fullscreen persistence issue when navigating between pages
- Improves performance by eliminating unnecessary page reloads
Files updated:
- GameCard.tsx: Main game navigation from arena
- AppNavBar.tsx: Exit arcade button navigation
- ResultsPhase.tsx: Back to games button
- Games page: Game launcher navigation
- Arcade page: Exit arcade navigation
- FullscreenGameLayout.tsx: Exit game navigation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update FullscreenContext to use ref-based element tracking instead of document.documentElement
- Add setFullscreenElement function to register specific DOM elements for fullscreen
- Update arcade page to register its main div as the fullscreen target element
- Update memory matching game to register its main div as the fullscreen target element
- Use element-specific fullscreen control instead of document-wide fullscreen
This properly fixes fullscreen persistence when navigating between components
by ensuring each component registers its specific container element as the
fullscreen target, preventing fullscreen loss during navigation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add FullscreenProvider to memory matching game page
- Add FullscreenProvider wrapper to arcade page
- Handle ?fullscreen=true URL parameter in MemoryPairsGame component
- Ensure fullscreen mode persists when clicking games from arcade
- GameCard component already passes fullscreen parameter when navigating from arcade
This fixes the issue where entering fullscreen in arcade and then clicking
memory pairs would exit fullscreen mode.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update MemoryPairsContext to use GameMode arena champions instead of UserProfile
- Extend game support from 2 players to N players with dynamic player IDs
- Update PlayerScore interface from fixed structure to dynamic object mapping
- Modify GamePhase to display actual arena champion names, emojis, and colors
- Update ResultsPhase to show all arena champions with proper winner calculation
- Add getMultiplayerWinner utility function for N-player winner determination
- Fix TypeScript errors from GameMode type changes (single | multiplayer)
- Ensure proper score tracking and turn switching for any number of players
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Enhance mobile experience with responsive button sizing, 44px minimum touch targets, touch-action manipulation, and responsive grid layouts for better mobile usability.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement dnd-kit TouchSensor with proper activation constraints (250ms delay, 8px tolerance) to enable drag and drop functionality on mobile devices.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Improve AppNavBar accessibility on mobile devices with 44px minimum touch targets, responsive padding, and better responsive design patterns.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add proper viewport meta tag configuration to prevent unwanted zooming and ensure optimal mobile experience with device-width scaling.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix animated.div JSX syntax issues in EnhancedChampionArena
- Add type declarations for @soroban/abacus-react module
- Add proper test framework type definitions for Vitest globals
- Fix skillConfiguration.ts type mismatches with proper assertions
- Handle possibly undefined totalSteps in test files
- Resolve JSX closing tag issues and prop type conflicts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add onToggleArena prop to ChampionCard components
- Implement handleToggleArena function for direct card clicks
- Fix remove button functionality in arena cards
- Add hover effects and pointer cursor for better UX
- Cards can now be clicked to add/remove from arena without dragging
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implemented useTransition for beautiful cross-zone movement animations
- Created AnimatedChampionCard wrapper for transition effects
- Toned down entrance animations (scale 0.95→1 instead of 0.8→1)
- Reduced drag scaling (1.02x instead of 1.05x) and rotation (3° instead of 10°)
- Changed to gentle spring config to eliminate "explodey" effect
- Fixed collision detection variable naming
- Cards now smoothly slide and reorder when moving between zones
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added useDroppable hooks to DroppableZone components
- Fixed roster->arena and arena->roster drag functionality
- Proper drop zone detection with visual feedback
- Removed manual overId tracking in favor of dnd-kit's built-in state
- Champions can now be dragged out of arena back to roster
- Enhanced drop zone animations respond to actual drag over state
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replaced custom collision detection with closestCenter
- Removed unused imports for collision detection utilities
- Fixed runtime error with collisions not being iterable
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed useTransition conflicts with dnd-kit SortableContext
- Moved animations to individual ChampionCard components
- Added entry animations with react-spring for smooth card appearance
- Simplified rendering to avoid ref management conflicts
- Cleaned up unused imports
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated AbacusDisplayDropdown to accept isFullscreen prop
- Added dark/cosmic styling that adapts to fullscreen mode
- Updated trigger button, content panel, and all form controls
- Enhanced FormField, SwitchField, and RadioGroupField components
- Integrated with AppNavBar to pass fullscreen state
- Ensures consistent cosmic theme across entire navigation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove unused onConfigurePlayer prop from ChampionArena interface
- Update GameSelector component interactions
- Update Claude settings for development workflow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update GameCard to append ?fullscreen=true when clicked from arcade:
- Detect arcade context via pathname
- Automatically add fullscreen parameter for arcade-launched games
- Maintain existing navigation for non-arcade contexts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Wrap Memory Lightning game with FullscreenGameLayout to:
- Enable fullscreen mode when accessed from arcade
- Provide consistent navigation experience
- Maintain existing game functionality and styling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Transform games page by:
- Removing embedded Champion Arena component
- Adding large animated "ENTER ARCADE" button that navigates to /arcade
- Maintaining existing GameSelector for non-arcade game access
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create dedicated /arcade route that:
- Auto-enters fullscreen mode on page load
- Features cosmic theme with animated background gradients
- Integrates Champion Arena for game selection
- Provides mini navigation bar with exit functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create reusable FullscreenGameLayout that:
- Auto-enters fullscreen when ?fullscreen=true URL parameter is present
- Provides mini navigation bar in fullscreen mode
- Handles exit to arcade functionality
- Applies cosmic dark theme styling in fullscreen
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement FullscreenContext with cross-browser compatibility for:
- Native fullscreen entry/exit using browser APIs
- Fullscreen state management with React context
- Support for webkit, moz, and ms vendor prefixes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove 130+ generated styled-system files that were incorrectly tracked.
These files should be treated as build output and regenerated locally.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add setGameModeWithPlayers method for legacy auto-player-activation behavior
- Separate concerns: setGameMode for arena, setGameModeWithPlayers for other usage
- Maintain backward compatibility while supporting new drag-and-drop arena
- Document that player activation is now handled by ChampionArena component
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Integrate GameSelector component directly into arena interface
- Add gear buttons to all player cards for configuration access
- Improve drag and drop with roster return functionality
- Add click handlers for easy champion management
- Update mode indicator to show "Select Champions" when arena is empty
- Add proper visual feedback for drag operations
- Support both drag and click interactions for accessibility
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add GameModeProvider to matching game page
- Remove local player selection from SetupPhase component
- Replace with global context integration showing current setup
- Update timer settings and preview to use activePlayerCount
- Games now use unified player management system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove local gameMode state from MemoryPairsContext
- Derive game mode from global activePlayerCount
- Update types to reflect gameMode as computed property
- Remove SET_GAME_MODE action and setGameMode function
- Update gameScoring getAchievements to accept gameMode parameter
- Games now read player configuration from global context
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create GameSelector component with variant support (compact/detailed)
- Create GameCard component with game availability logic
- Support filtering games based on active player count
- Add empty state handling for when no games are available
- Components are composable and can be used anywhere in the app
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
🏟️ MAJOR FEATURE: Transform games page with innovative Champion Arena
- Create ChampionArena component with drag-and-drop avatar selection
- Combine "choose your champion" + player count in one intuitive interface
- Visual arena where users drag avatars to set game mode (solo/battle/tournament)
- Replace modal selection with always-visible arena experience
- Add GameModeContext for centralized player configuration management
- Enhanced animations: arena entry, champion ready, floating effects
- Real-time mode indicators and champion status tracking
- Click to remove champions from arena with smooth animations
✨ INNOVATION: Drag avatars into arena = instant game mode selection
- 1 champion = Solo Mode
- 2 champions = Battle Mode
- 3+ champions = Tournament Mode
🎮 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove duplicate mode selection from /games page
- Let individual games handle their own mode selection
- Revert "Battle Arena" back to "Memory Pairs" (original name)
- Simplify character selection to just pick champion
- Clean flow: click game → pick character → go to game
No more redundant screens!
🎮 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Smart game mode handling:
- Memory Lightning: Skip mode selection (single-player only)
- Battle Arena: Show mode selection (supports both modes)
- Pass mode parameters to matching game via URL
- Eliminates redundant mode selection on consecutive screens
Much cleaner user flow!
🎮 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Now clicking character cards opens selection modal, then navigating to:
- Memory Lightning → /games/memory-quiz
- Battle Arena → /games/matching
Character-driven game entry flow is complete!
🎮 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Transform /games into character-driven arcade experience with:
🏆 Character Showcase Header:
- Floating character cards with Player 1 & 2 emojis
- Real-time stats (games played, victories, levels)
- XP progress bars with character-themed gradients
- Quick customization buttons (⚙️)
💬 Interactive Recommendations:
- Speech bubbles on game card hover
- Personality-driven suggestions from characters
- Smooth animation effects
📊 Character vs Character Dashboard:
- Head-to-head win/loss records
- Recent achievements with character badges
- Active challenge system between players
- "Create New Challenge" functionality
🎮 Interactive Character Selection Modal:
- Game mode selection (Solo vs Battle)
- Character picker with stats and personalities
- Smooth fadeIn/slideInUp animations
- Mobile-responsive design
✨ Visual Polish:
- 15+ custom keyframe animations
- Character-specific color theming (blue/purple)
- Glassmorphism effects with backdrop blur
- Hover interactions and character bounce effects
Characters are now the "stars of the show" with living personalities!
🎮 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix TypstSoroban component prop type mismatches by removing invalid direct props
- Fix missing gameTime property errors by calculating from gameStartTime/gameEndTime
- Extend TargetSum type to include 20 for advanced complement pairs
- Add proper Record typing for game configuration objects to fix index type issues
- Fix timer configuration typing in SetupPhase component
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>