fix(calendar-lab): rewrite zoom as GSAP flying-rect with proper async sequencing

- Replace panzoom + timeline approach with clean async/await GSAP tweens
- Flying rect morphs from cell position to full viewport (aspect ratio change)
- Fix zoomOut race condition: nested gsap.to inside tl.call fired outside timeline
- Fix opacity conflict: GSAP controls all opacity, CSS class only for pointer-events
- Fix gridLayerRef losing reference on :key remount during resize
- Make viewport dimensions reactive via ResizeObserver (vpWidth/vpHeight refs)
- Wait for fade-in completion before unlocking isAnimating

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ruslan Bakiev
2026-02-24 09:47:45 +07:00
parent b316b024be
commit 3e711a5533
3 changed files with 386 additions and 369 deletions

View File

@@ -30,6 +30,7 @@
"daisyui": "^5.5.18",
"graphql": "^16.12.0",
"graphql-tag": "^2.12.6",
"gsap": "^3.14.2",
"ioredis": "^5.7.0",
"langfuse": "^3.38.6",
"langsmith": "^0.5.4",
@@ -15131,6 +15132,12 @@
}
}
},
"node_modules/gsap": {
"version": "3.14.2",
"resolved": "https://registry.npmjs.org/gsap/-/gsap-3.14.2.tgz",
"integrity": "sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==",
"license": "Standard 'no charge' license: https://gsap.com/standard-license."
},
"node_modules/guid-typescript": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",