Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73f8f637cd | ||
|
|
f32480a0f9 | ||
|
|
11aa44d882 | ||
|
|
30e16c8e5a |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,3 +1,17 @@
|
||||
## [4.61.2](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.61.1...v4.61.2) (2025-10-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **flashcards:** use explicit per-property configs to fix decay physics ([f32480a](https://github.com/antialias/soroban-abacus-flashcards/commit/f32480a0f9153285341e5a28078840abc0590873))
|
||||
|
||||
## [4.61.1](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.61.0...v4.61.1) (2025-10-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **flashcards:** fix position snap-back by using api.set before decay ([30e16c8](https://github.com/antialias/soroban-abacus-flashcards/commit/30e16c8e5ac3bb25f2d54cf715dc6fb45adc4fcc))
|
||||
|
||||
## [4.61.0](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.60.0...v4.61.0) (2025-10-21)
|
||||
|
||||
|
||||
|
||||
@@ -200,6 +200,12 @@ function DraggableCard({ card }: DraggableCardProps) {
|
||||
currentPositionRef.current.x = currentPositionRef.current.x + mx
|
||||
currentPositionRef.current.y = currentPositionRef.current.y + my
|
||||
|
||||
// First, snap the spring to the dropped position immediately
|
||||
api.set({
|
||||
x: currentPositionRef.current.x,
|
||||
y: currentPositionRef.current.y,
|
||||
})
|
||||
|
||||
// On release, apply momentum with decay physics
|
||||
const throwVelocityX = lastVelocityRef.current.vx * 1000
|
||||
const throwVelocityY = lastVelocityRef.current.vy * 1000
|
||||
@@ -207,20 +213,24 @@ function DraggableCard({ card }: DraggableCardProps) {
|
||||
// Calculate final rotation based on throw direction
|
||||
const throwAngle = Math.atan2(throwVelocityY, throwVelocityX) * (180 / Math.PI)
|
||||
|
||||
// Start position decay and rotation/scale animations
|
||||
api.start({
|
||||
x: {
|
||||
from: currentPositionRef.current.x,
|
||||
velocity: throwVelocityX,
|
||||
decay: true,
|
||||
config: { decay: true },
|
||||
},
|
||||
y: {
|
||||
from: currentPositionRef.current.y,
|
||||
velocity: throwVelocityY,
|
||||
decay: true,
|
||||
config: { decay: true },
|
||||
},
|
||||
scale: {
|
||||
value: 1,
|
||||
config: config.wobbly,
|
||||
},
|
||||
rotation: {
|
||||
value: throwAngle + 90, // Card aligns with throw direction
|
||||
config: config.wobbly,
|
||||
},
|
||||
scale: 1,
|
||||
rotation: throwAngle + 90, // Card aligns with throw direction
|
||||
config: config.wobbly,
|
||||
onChange: (result) => {
|
||||
// Continue updating position as card settles with momentum
|
||||
if (result.value.x !== undefined) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "soroban-monorepo",
|
||||
"version": "4.61.0",
|
||||
"version": "4.61.2",
|
||||
"private": true,
|
||||
"description": "Beautiful Soroban Flashcard Generator - Monorepo",
|
||||
"workspaces": [
|
||||
|
||||
Reference in New Issue
Block a user