cd StellarStream
npm installnpm run devThen open your browser to the URL shown (typically http://localhost:5173)
# Run all tests once
npm test
# Run tests in watch mode (for development)
npm run test:watchnpm run buildimport { TransactionPendingOrb } from './components/TransactionPendingOrb';
import { useState } from 'react';
function App() {
const [walletStatus, setWalletStatus] = useState('idle');
return (
<>
<YourContent />
<TransactionPendingOrb walletStatus={walletStatus} />
</>
);
}import { useSorobanWallet } from './examples/SorobanIntegration';
import { TransactionPendingOrb } from './components/TransactionPendingOrb';
function SorobanApp() {
const { walletStatus, signTransaction } = useSorobanWallet();
const handleTransaction = async () => {
await signTransaction({
id: 'tx-123',
operation: 'payment'
});
};
return (
<>
<button onClick={handleTransaction}>Send Payment</button>
<TransactionPendingOrb walletStatus={walletStatus} />
</>
);
}The orb responds to these wallet states:
idle- Hidden (no transaction)pending- Visible with breathing animation (awaiting signature)signed- Hidden immediately (transaction signed)rejected- Hidden immediately (transaction rejected)
- Click "Simulate Transaction" button
- Watch the orb appear in bottom-right corner
- Notice the smooth breathing animation
- Orb disappears automatically after 5 seconds (simulated signature)
- Try it multiple times to see consistent behavior
To test reduced motion support:
- Enable "Reduce Motion" in your OS settings:
- macOS: System Preferences → Accessibility → Display → Reduce motion
- Windows: Settings → Ease of Access → Display → Show animations
- Reload the page
- The orb will appear without animation
- Component uses CSS-only animations (no JavaScript loops)
- Non-blocking (pointer-events: none)
- No layout shifts (CSS containment)
- Minimal re-renders (state-driven visibility)
- Clean effect cleanup (no memory leaks)
Tested and working on:
- Chrome 88+
- Firefox 85+
- Safari 14+
- Edge 88+
- Check that
walletStatusis set to'pending' - Verify the component is rendered in your JSX
- Check browser console for errors
- Ensure CSS file is imported
- Check if "Reduce Motion" is enabled (animation disabled by design)
- Verify browser supports CSS animations
- Run
npm installto ensure all dependencies are installed - Check that jsdom is properly configured in vite.config.ts
- Ensure you're using Node.js 18+ for best compatibility