## Summary
- add a useSnatchSelection composable that centralises snatch shortfall calculations, position filtering, and RPC memoisation
- refactor StakeHolder.vue to consume the composable instead of reimplementing the flow inline
- introduce Vitest config and first composable tests (useSnatchSelection.spec.ts) to cover empty/partial fills and ownership edge cases
- wire up project tooling updates so the new tests run (jsdom dep, updated package metadata)
## Testing
- cd web-app && npm install
- npm test
resolves#24
Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/harb/pulls/30