원문: https://github.com/facebook/astryx/wiki/Animation-System · 번역 기준: 2026-09-03
Status: Design exploration. 오늘 존재하는 것은 기본 transition token뿐입니다. 이 스펙은 전체 애니메이션 시스템의 청사진입니다. 여기 있는 것 중 아직 구현된 것은 없습니다 — 애니메이션 작업이 시작될 때를 위한 목표 디자인을 담은 것입니다.
Exploration, 2026년 1월
Astryx의 핵심 아키텍처는 제약을 enforcement합니다: zero styling, 테마 주도 token, 타입이 있는 API. 이 exploration은 애니메이션이 그 제약 기반 모델에 어떻게 들어맞는지 검토합니다.
질문은 "어떤 애니메이션 라이브러리를 써야 하는가?"가 아니라 "임의 값 금지, source of truth로서의 테마, 제약을 통한 AI 친화성이라는 Astryx의 철학에 애니메이션이 어떻게 통합되는가?"입니다.
가정: 이 문서는 Astryx가 스타일링에 StyleX를 사용한다고 가정합니다(Why StyleX 참고). 애니메이션 구현은 StyleX의 컴파일 타임, 제로 런타임 철학과 정렬됩니다.
애니메이션은 스타일링의 형제입니다. 같은 규칙이 적용됩니다.
| Astryx 원칙 | 애니메이션 적용 |
|---|---|
| Zero-styling: 인라인 스타일 없음, style prop 없음 | Zero animation code: animate={{}} 없음, transition prop 없음 |
| Source of truth로서의 테마 | 애니메이션 config는 theme.motion에 위치 |
| Prop은 스타일이 아니라 의도를 정의 | open={true}는 의도를 표현하고, 애니메이션은 구현 세부사항 |
| 타입이 있는 제약된 API | 애니메이션 타입은 임의 값이 아니라 enum (`'fade' \ |
| Edge case를 위한 swizzle | 애니메이션 동작을 override하려면 컴포넌트를 swizzle |
| 제약을 통한 AI 친화성 | AI는 <Dialog open>을 작성하고, 애니메이션에 대해 아무것도 모름 |
// What developers write:
<Dialog open={isOpen}>
<DialogTitle>Confirm</DialogTitle>
<DialogContent>Are you sure?</DialogContent>
</Dialog>
// Animation just happens (configured in theme)
AI는 Motion이든 StyleX든 어느 쪽으로든 애니메이션을 쉽게 구현할 수 있습니다. 질문은 트레이드오프가 의존성 추가를 정당화하느냐입니다.
| CSS / StyleX | Motion (motion/react) | |
|---|---|---|
| Enter 애니메이션 | ✅ @starting-style이 처리 |
✅ initial → animate |
| Exit 애니메이션 | ⚠️ Custom unmount delay 필요 | ✅ AnimatePresence로 공짜 |
| Gesture 애니메이션 | ⚠️ 더 장황하고 수동적 | ✅ First-class drag/swipe |
| Spring physics | ⚠️ Cubic-bezier 근사 (또는 직접 구현하지만 그럴 거면 왜 Motion을 안 쓰나?) | ✅ 진짜 spring |
| 번들 크기 | ✅ 0KB | ⚠️ ~18KB |
| 철학 적합성 | ✅ 컴파일 타임, 런타임 없음 | ⚠️ 런타임 JS |
솔직한 평가: