feat: améliore le fondu enchaîné et recalibre les vitesses
ci/woodpecker/push/woodpecker Pipeline was successful

- Fondu : dip à 0.15 (au lieu de 0) pour un effet dissolve plutôt
  qu'un blink; ease-out 150ms / ease-in 200ms
- Délais : 1500ms base (×1=1.5s, ×2=750ms, ×4=375ms)
- Vitesse par défaut : ×2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
syoul
2026-03-23 21:52:44 +01:00
parent 30057a07fb
commit d50b30666b
2 changed files with 6 additions and 5 deletions
+4 -3
View File
@@ -89,13 +89,14 @@ export function HeatMap({ transactions }: HeatMapProps) {
return; return;
} }
canvas.style.transition = 'opacity 0.25s ease-in-out'; canvas.style.transition = 'opacity 0.15s ease-out';
canvas.style.opacity = '0'; canvas.style.opacity = '0.15';
const t = setTimeout(() => { const t = setTimeout(() => {
update(); update();
canvas.style.transition = 'opacity 0.2s ease-in';
canvas.style.opacity = '1'; canvas.style.opacity = '1';
}, 250); }, 150);
return () => clearTimeout(t); return () => clearTimeout(t);
}, [transactions]); }, [transactions]);
+2 -2
View File
@@ -60,7 +60,7 @@ export function useAnimation(transactions: Transaction[], periodDays: number) {
const [active, setActive] = useState(false); const [active, setActive] = useState(false);
const [currentIndex, setCurrentIndex] = useState(0); const [currentIndex, setCurrentIndex] = useState(0);
const [playing, setPlaying] = useState(false); const [playing, setPlaying] = useState(false);
const [speed, setSpeed] = useState<1 | 2 | 4>(1); const [speed, setSpeed] = useState<1 | 2 | 4>(2);
const frames = useMemo(() => buildFrames(periodDays), [periodDays]); const frames = useMemo(() => buildFrames(periodDays), [periodDays]);
@@ -73,7 +73,7 @@ export function useAnimation(transactions: Transaction[], periodDays: number) {
// Auto-advance: one step every (2000 / speed) ms // Auto-advance: one step every (2000 / speed) ms
useEffect(() => { useEffect(() => {
if (!playing || !active) return; if (!playing || !active) return;
const delay = 2000 / speed; const delay = 1500 / speed; // ×1=1500ms, ×2=750ms, ×4=375ms
const t = setTimeout(() => { const t = setTimeout(() => {
setCurrentIndex((i) => { setCurrentIndex((i) => {
if (i >= frames.length - 1) { if (i >= frames.length - 1) {