- Fixed-position floating UI component
- Bottom-right corner placement
- 3D-like orb rendering
- Hyper Violet (#8a2be2) glow effect
- Soft, performant CSS glow (box-shadow)
- Low-contrast ghost-style text
- Text reads "Awaiting Ledger Authorization..."
- Smooth breathing animation
- CSS transforms (scale up/down)
- Ease-in-out timing function
- Infinite loop while pending
- Animation only runs during pending state
- No heavy assets or JavaScript animation loops
- Appears when wallet state is pending
- Disappears immediately on signed
- Disappears immediately on rejected
- Clean state-driven rendering
- Tied to wallet status prop
- Non-blocking (pointer-events: none)
- Does not interfere with user interactions
- No layout shifts (CSS containment)
- Respects prefers-reduced-motion
- Smooth appearance/disappearance
- ARIA live region for status updates
- role="status" attribute
- aria-live="polite" attribute
- aria-label support
- Screen reader announcements
- Keyboard navigation not blocked
- Optimized for performance
- CSS-only animations
- will-change property
- No unnecessary re-renders
- No memory leaks
- Clean effect cleanup
- Conditional rendering
- Chrome/Edge 88+
- Firefox 85+
- Safari 14+
- Modern browser support
- Graceful degradation
- Visibility toggling tests
- State transition tests (idle → pending → signed/rejected)
- Content rendering tests
- Accessibility tests (ARIA attributes)
- Animation state tests
- Memory leak prevention tests
- Rapid state change tests
- Effect cleanup tests
- Layout and positioning verification
- CSS class application tests
- DOM structure integrity tests
- Animation class tests
- Performance optimization tests
- Example Soroban integration
- Custom hook pattern
- Real-world usage examples
- Full TypeScript support
- Proper type definitions
- Type exports
- Shared type definitions
- Type guards
- Separate component file
- Separate CSS file
- Separate test files
- Example implementations
- Type definitions file
- README with features
- Quick start guide
- Usage examples
- API documentation
- Accessibility notes
- Performance notes
- Browser compatibility
- Troubleshooting guide
- package.json with scripts
- TypeScript configuration
- Vite configuration
- Test setup (Vitest)
- .gitignore
- React 18
- TypeScript 5
- Vite 5
- Vitest 1
- Testing Library
- jsdom
cd StellarStream
npm installnpm run devnpm testnpm run build- Lightweight: Pure CSS, no heavy libraries
- Performant: GPU-accelerated transforms, no JS animations
- Accessible: Full ARIA support, screen reader compatible
- Responsive: Respects user preferences (reduced motion)
- Robust: Comprehensive test coverage
- Type-Safe: Full TypeScript support
- Production-Ready: Optimized, tested, documented
- Run
npm install- Should complete without errors - Run
npm test- All tests should pass - Run
npm run dev- Dev server should start - Click "Simulate Transaction" - Orb should appear
- Wait 5 seconds - Orb should disappear
- Check browser console - No errors or warnings
- Enable "Reduce Motion" - Animation should stop
- Check accessibility tree - Proper ARIA attributes
- Custom hook pattern for wallet integration
- Example Soroban integration
- Visual regression tests
- Type guards for runtime safety
- Comprehensive error handling
- Clean component API
- Minimal prop surface
- Zero external dependencies (except React)