@prestyj/cli 5.26.0 → 5.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -7
- package/assets/motion/BRAG-LICENSE +21 -0
- package/assets/motion/HYPERFRAMES-LICENSE +190 -0
- package/assets/motion/THIRD-PARTY.md +57 -0
- package/assets/motion/assets/music/README.md +20 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/assets/motion/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/bong_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_003.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_003.ogg +0 -0
- package/assets/motion/assets/sfx/interface/error_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/error_006.ogg +0 -0
- package/assets/motion/assets/sfx/interface/glitch_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/glitch_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/select_008.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_006.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_007.ogg +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/assets/motion/assets/sfx/sfx-analysis.json +15584 -0
- package/assets/motion/assets/sfx/sfx-analysis.md +75 -0
- package/assets/motion/assets/sfx/ui/click1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click3.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch10.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch11.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch12.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch13.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch14.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch15.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch16.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch17.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch18.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch19.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch20.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch21.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch22.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch23.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch24.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch25.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch26.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch27.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch28.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch29.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch3.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch30.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch31.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch32.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch33.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch34.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch35.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch36.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch37.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch38.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch6.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch7.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch8.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch9.ogg +0 -0
- package/assets/motion/bin/contact-sheet.mjs +87 -0
- package/assets/motion/bin/fonts.mjs +107 -0
- package/assets/motion/bin/hyperframes.mjs +122 -0
- package/assets/motion/bin/library.mjs +210 -0
- package/assets/motion/bin/media-binaries.mjs +49 -0
- package/assets/motion/bin/motion-check.mjs +250 -0
- package/assets/motion/bin/pdf-extract.mjs +133 -0
- package/assets/motion/bin/reveal.mjs +76 -0
- package/assets/motion/bin/review-frames.mjs +328 -0
- package/assets/motion/bin/score-synth.mjs +486 -0
- package/assets/motion/bin/three.mjs +55 -0
- package/assets/motion/fonts/anybody/OFL.txt +93 -0
- package/assets/motion/fonts/anybody/anybody-normal.woff2 +0 -0
- package/assets/motion/fonts/archivo/OFL.txt +93 -0
- package/assets/motion/fonts/archivo/archivo-normal.woff2 +0 -0
- package/assets/motion/fonts/big-shoulders/OFL.txt +93 -0
- package/assets/motion/fonts/big-shoulders/big-shoulders-normal.woff2 +0 -0
- package/assets/motion/fonts/bricolage-grotesque/OFL.txt +93 -0
- package/assets/motion/fonts/bricolage-grotesque/bricolage-grotesque-normal.woff2 +0 -0
- package/assets/motion/fonts/doto/OFL.txt +93 -0
- package/assets/motion/fonts/doto/doto-normal.woff2 +0 -0
- package/assets/motion/fonts/fonts.json +209 -0
- package/assets/motion/fonts/fraunces/OFL.txt +93 -0
- package/assets/motion/fonts/fraunces/fraunces-italic.woff2 +0 -0
- package/assets/motion/fonts/fraunces/fraunces-normal.woff2 +0 -0
- package/assets/motion/fonts/funnel-display/OFL.txt +93 -0
- package/assets/motion/fonts/funnel-display/funnel-display-normal.woff2 +0 -0
- package/assets/motion/fonts/gloock/OFL.txt +93 -0
- package/assets/motion/fonts/gloock/gloock-normal.woff2 +0 -0
- package/assets/motion/fonts/host-grotesk/OFL.txt +93 -0
- package/assets/motion/fonts/host-grotesk/host-grotesk-normal.woff2 +0 -0
- package/assets/motion/fonts/hubot-sans/OFL.txt +93 -0
- package/assets/motion/fonts/hubot-sans/hubot-sans-normal.woff2 +0 -0
- package/assets/motion/fonts/martian-mono/OFL.txt +93 -0
- package/assets/motion/fonts/martian-mono/martian-mono-normal.woff2 +0 -0
- package/assets/motion/fonts/mona-sans/OFL.txt +93 -0
- package/assets/motion/fonts/mona-sans/mona-sans-normal.woff2 +0 -0
- package/assets/motion/fonts/newsreader/OFL.txt +93 -0
- package/assets/motion/fonts/newsreader/newsreader-italic.woff2 +0 -0
- package/assets/motion/fonts/newsreader/newsreader-normal.woff2 +0 -0
- package/assets/motion/fonts/schibsted-grotesk/OFL.txt +93 -0
- package/assets/motion/fonts/schibsted-grotesk/schibsted-grotesk-normal.woff2 +0 -0
- package/assets/motion/fonts/specimen.jpg +0 -0
- package/assets/motion/fonts/young-serif/OFL.txt +93 -0
- package/assets/motion/fonts/young-serif/young-serif-normal.woff2 +0 -0
- package/assets/motion/library/README.md +104 -0
- package/assets/motion/library/library.json +1384 -0
- package/assets/motion/library/looks/acid-poster/look.md +82 -0
- package/assets/motion/library/looks/acid-poster/meta.json +11 -0
- package/assets/motion/library/looks/acid-poster/preview.jpg +0 -0
- package/assets/motion/library/looks/acid-poster/sample.html +177 -0
- package/assets/motion/library/looks/acid-poster/tokens.css +16 -0
- package/assets/motion/library/looks/blueprint/look.md +22 -0
- package/assets/motion/library/looks/blueprint/meta.json +11 -0
- package/assets/motion/library/looks/blueprint/preview.jpg +0 -0
- package/assets/motion/library/looks/blueprint/sample.html +301 -0
- package/assets/motion/library/looks/blueprint/tokens.css +16 -0
- package/assets/motion/library/looks/dark-studio/look.md +85 -0
- package/assets/motion/library/looks/dark-studio/meta.json +11 -0
- package/assets/motion/library/looks/dark-studio/preview.jpg +0 -0
- package/assets/motion/library/looks/dark-studio/sample.html +324 -0
- package/assets/motion/library/looks/dark-studio/tokens.css +16 -0
- package/assets/motion/library/looks/data-desk/look.md +19 -0
- package/assets/motion/library/looks/data-desk/meta.json +9 -0
- package/assets/motion/library/looks/data-desk/preview.jpg +0 -0
- package/assets/motion/library/looks/data-desk/sample.html +17 -0
- package/assets/motion/library/looks/data-desk/tokens.css +15 -0
- package/assets/motion/library/looks/duotone-broadcast/look.md +53 -0
- package/assets/motion/library/looks/duotone-broadcast/meta.json +11 -0
- package/assets/motion/library/looks/duotone-broadcast/preview.jpg +0 -0
- package/assets/motion/library/looks/duotone-broadcast/sample.html +45 -0
- package/assets/motion/library/looks/duotone-broadcast/tokens.css +16 -0
- package/assets/motion/library/looks/editorial-ink/look.md +80 -0
- package/assets/motion/library/looks/editorial-ink/meta.json +11 -0
- package/assets/motion/library/looks/editorial-ink/preview.jpg +0 -0
- package/assets/motion/library/looks/editorial-ink/sample.html +203 -0
- package/assets/motion/library/looks/editorial-ink/tokens.css +16 -0
- package/assets/motion/library/looks/mono-luxe/look.md +19 -0
- package/assets/motion/library/looks/mono-luxe/meta.json +9 -0
- package/assets/motion/library/looks/mono-luxe/preview.jpg +0 -0
- package/assets/motion/library/looks/mono-luxe/sample.html +12 -0
- package/assets/motion/library/looks/mono-luxe/tokens.css +15 -0
- package/assets/motion/library/looks/soft-light-ad/look.md +63 -0
- package/assets/motion/library/looks/soft-light-ad/meta.json +39 -0
- package/assets/motion/library/looks/soft-light-ad/preview.jpg +0 -0
- package/assets/motion/library/looks/soft-light-ad/sample.html +44 -0
- package/assets/motion/library/looks/soft-light-ad/tokens.css +17 -0
- package/assets/motion/library/looks/sunlit-consumer/look.md +19 -0
- package/assets/motion/library/looks/sunlit-consumer/meta.json +9 -0
- package/assets/motion/library/looks/sunlit-consumer/preview.jpg +0 -0
- package/assets/motion/library/looks/sunlit-consumer/sample.html +12 -0
- package/assets/motion/library/looks/sunlit-consumer/tokens.css +15 -0
- package/assets/motion/library/looks/swiss-grid/look.md +81 -0
- package/assets/motion/library/looks/swiss-grid/meta.json +11 -0
- package/assets/motion/library/looks/swiss-grid/preview.jpg +0 -0
- package/assets/motion/library/looks/swiss-grid/sample.html +209 -0
- package/assets/motion/library/looks/swiss-grid/tokens.css +16 -0
- package/assets/motion/library/looks/terminal-phosphor/look.md +77 -0
- package/assets/motion/library/looks/terminal-phosphor/meta.json +11 -0
- package/assets/motion/library/looks/terminal-phosphor/preview.jpg +0 -0
- package/assets/motion/library/looks/terminal-phosphor/sample.html +182 -0
- package/assets/motion/library/looks/terminal-phosphor/tokens.css +16 -0
- package/assets/motion/library/pieces/animated-beam/LICENSE +21 -0
- package/assets/motion/library/pieces/animated-beam/meta.json +16 -0
- package/assets/motion/library/pieces/animated-beam/piece.html +273 -0
- package/assets/motion/library/pieces/animated-beam/preview.jpg +0 -0
- package/assets/motion/library/pieces/animated-list/LICENSE +21 -0
- package/assets/motion/library/pieces/animated-list/meta.json +16 -0
- package/assets/motion/library/pieces/animated-list/piece.html +189 -0
- package/assets/motion/library/pieces/animated-list/preview.jpg +0 -0
- package/assets/motion/library/pieces/before-after-split/meta.json +12 -0
- package/assets/motion/library/pieces/before-after-split/piece.html +262 -0
- package/assets/motion/library/pieces/before-after-split/preview.jpg +0 -0
- package/assets/motion/library/pieces/blueprint-grid/meta.json +12 -0
- package/assets/motion/library/pieces/blueprint-grid/piece.html +209 -0
- package/assets/motion/library/pieces/blueprint-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/broadcast-frame/meta.json +12 -0
- package/assets/motion/library/pieces/broadcast-frame/piece.html +100 -0
- package/assets/motion/library/pieces/broadcast-frame/preview.jpg +0 -0
- package/assets/motion/library/pieces/browser-window/meta.json +12 -0
- package/assets/motion/library/pieces/browser-window/piece.html +331 -0
- package/assets/motion/library/pieces/browser-window/preview.jpg +0 -0
- package/assets/motion/library/pieces/chapter-card/meta.json +6 -0
- package/assets/motion/library/pieces/chapter-card/piece.html +12 -0
- package/assets/motion/library/pieces/chapter-card/preview.jpg +0 -0
- package/assets/motion/library/pieces/chat-thread/meta.json +12 -0
- package/assets/motion/library/pieces/chat-thread/piece.html +272 -0
- package/assets/motion/library/pieces/chat-thread/preview.jpg +0 -0
- package/assets/motion/library/pieces/clay-drop-3d/meta.json +13 -0
- package/assets/motion/library/pieces/clay-drop-3d/piece.html +224 -0
- package/assets/motion/library/pieces/clay-drop-3d/preview.jpg +0 -0
- package/assets/motion/library/pieces/color-flip-field/meta.json +12 -0
- package/assets/motion/library/pieces/color-flip-field/piece.html +81 -0
- package/assets/motion/library/pieces/color-flip-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/color-wipe/meta.json +6 -0
- package/assets/motion/library/pieces/color-wipe/piece.html +10 -0
- package/assets/motion/library/pieces/color-wipe/preview.jpg +0 -0
- package/assets/motion/library/pieces/command-palette/meta.json +12 -0
- package/assets/motion/library/pieces/command-palette/piece.html +339 -0
- package/assets/motion/library/pieces/command-palette/preview.jpg +0 -0
- package/assets/motion/library/pieces/comparison-bars/meta.json +12 -0
- package/assets/motion/library/pieces/comparison-bars/piece.html +191 -0
- package/assets/motion/library/pieces/comparison-bars/preview.jpg +0 -0
- package/assets/motion/library/pieces/counter-number/meta.json +12 -0
- package/assets/motion/library/pieces/counter-number/piece.html +131 -0
- package/assets/motion/library/pieces/counter-number/preview.jpg +0 -0
- package/assets/motion/library/pieces/cursor-click/meta.json +12 -0
- package/assets/motion/library/pieces/cursor-click/piece.html +242 -0
- package/assets/motion/library/pieces/cursor-click/preview.jpg +0 -0
- package/assets/motion/library/pieces/dock-magnify/LICENSE +21 -0
- package/assets/motion/library/pieces/dock-magnify/meta.json +16 -0
- package/assets/motion/library/pieces/dock-magnify/piece.html +234 -0
- package/assets/motion/library/pieces/dock-magnify/preview.jpg +0 -0
- package/assets/motion/library/pieces/donut-fill/meta.json +12 -0
- package/assets/motion/library/pieces/donut-fill/piece.html +156 -0
- package/assets/motion/library/pieces/donut-fill/preview.jpg +0 -0
- package/assets/motion/library/pieces/dot-grid-field/meta.json +12 -0
- package/assets/motion/library/pieces/dot-grid-field/piece.html +61 -0
- package/assets/motion/library/pieces/dot-grid-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/ease-curve/meta.json +12 -0
- package/assets/motion/library/pieces/ease-curve/piece.html +103 -0
- package/assets/motion/library/pieces/ease-curve/preview.jpg +0 -0
- package/assets/motion/library/pieces/end-card/meta.json +6 -0
- package/assets/motion/library/pieces/end-card/piece.html +11 -0
- package/assets/motion/library/pieces/end-card/preview.jpg +0 -0
- package/assets/motion/library/pieces/film-grain/meta.json +12 -0
- package/assets/motion/library/pieces/film-grain/piece.html +93 -0
- package/assets/motion/library/pieces/film-grain/preview.jpg +0 -0
- package/assets/motion/library/pieces/flickering-grid/LICENSE +21 -0
- package/assets/motion/library/pieces/flickering-grid/meta.json +16 -0
- package/assets/motion/library/pieces/flickering-grid/piece.html +112 -0
- package/assets/motion/library/pieces/flickering-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/flow-nodes/meta.json +12 -0
- package/assets/motion/library/pieces/flow-nodes/piece.html +230 -0
- package/assets/motion/library/pieces/flow-nodes/preview.jpg +0 -0
- package/assets/motion/library/pieces/highlight-sweep/meta.json +12 -0
- package/assets/motion/library/pieces/highlight-sweep/piece.html +132 -0
- package/assets/motion/library/pieces/highlight-sweep/preview.jpg +0 -0
- package/assets/motion/library/pieces/iris-circle/meta.json +6 -0
- package/assets/motion/library/pieces/iris-circle/piece.html +6 -0
- package/assets/motion/library/pieces/iris-circle/preview.jpg +0 -0
- package/assets/motion/library/pieces/kinetic-letters/meta.json +12 -0
- package/assets/motion/library/pieces/kinetic-letters/piece.html +103 -0
- package/assets/motion/library/pieces/kinetic-letters/preview.jpg +0 -0
- package/assets/motion/library/pieces/light-leak-soft/meta.json +12 -0
- package/assets/motion/library/pieces/light-leak-soft/piece.html +102 -0
- package/assets/motion/library/pieces/light-leak-soft/preview.jpg +0 -0
- package/assets/motion/library/pieces/line-stack-reveal/meta.json +12 -0
- package/assets/motion/library/pieces/line-stack-reveal/piece.html +98 -0
- package/assets/motion/library/pieces/line-stack-reveal/preview.jpg +0 -0
- package/assets/motion/library/pieces/lower-third/meta.json +6 -0
- package/assets/motion/library/pieces/lower-third/piece.html +11 -0
- package/assets/motion/library/pieces/lower-third/preview.jpg +0 -0
- package/assets/motion/library/pieces/marquee-strip/meta.json +12 -0
- package/assets/motion/library/pieces/marquee-strip/piece.html +132 -0
- package/assets/motion/library/pieces/marquee-strip/preview.jpg +0 -0
- package/assets/motion/library/pieces/mesh-gradient/meta.json +12 -0
- package/assets/motion/library/pieces/mesh-gradient/piece.html +131 -0
- package/assets/motion/library/pieces/mesh-gradient/preview.jpg +0 -0
- package/assets/motion/library/pieces/orbiting-circles/LICENSE +21 -0
- package/assets/motion/library/pieces/orbiting-circles/meta.json +16 -0
- package/assets/motion/library/pieces/orbiting-circles/piece.html +185 -0
- package/assets/motion/library/pieces/orbiting-circles/preview.jpg +0 -0
- package/assets/motion/library/pieces/phone-frame/meta.json +12 -0
- package/assets/motion/library/pieces/phone-frame/piece.html +252 -0
- package/assets/motion/library/pieces/phone-frame/preview.jpg +0 -0
- package/assets/motion/library/pieces/pricing-toggle/meta.json +6 -0
- package/assets/motion/library/pieces/pricing-toggle/piece.html +18 -0
- package/assets/motion/library/pieces/pricing-toggle/preview.jpg +0 -0
- package/assets/motion/library/pieces/retro-grid/LICENSE +21 -0
- package/assets/motion/library/pieces/retro-grid/meta.json +16 -0
- package/assets/motion/library/pieces/retro-grid/piece.html +139 -0
- package/assets/motion/library/pieces/retro-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-through-word/meta.json +12 -0
- package/assets/motion/library/pieces/scale-through-word/piece.html +139 -0
- package/assets/motion/library/pieces/scale-through-word/preview.jpg +0 -0
- package/assets/motion/library/pieces/serif-quote/meta.json +12 -0
- package/assets/motion/library/pieces/serif-quote/piece.html +145 -0
- package/assets/motion/library/pieces/serif-quote/preview.jpg +0 -0
- package/assets/motion/library/pieces/slam-word/meta.json +12 -0
- package/assets/motion/library/pieces/slam-word/piece.html +72 -0
- package/assets/motion/library/pieces/slam-word/preview.jpg +0 -0
- package/assets/motion/library/pieces/soft-light-field/meta.json +12 -0
- package/assets/motion/library/pieces/soft-light-field/piece.html +83 -0
- package/assets/motion/library/pieces/soft-light-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/sparkline-draw/meta.json +12 -0
- package/assets/motion/library/pieces/sparkline-draw/piece.html +204 -0
- package/assets/motion/library/pieces/sparkline-draw/preview.jpg +0 -0
- package/assets/motion/library/pieces/stack-layers/meta.json +12 -0
- package/assets/motion/library/pieces/stack-layers/piece.html +239 -0
- package/assets/motion/library/pieces/stack-layers/preview.jpg +0 -0
- package/assets/motion/library/pieces/stat-grid/meta.json +12 -0
- package/assets/motion/library/pieces/stat-grid/piece.html +200 -0
- package/assets/motion/library/pieces/stat-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/studio-backdrop/meta.json +12 -0
- package/assets/motion/library/pieces/studio-backdrop/piece.html +83 -0
- package/assets/motion/library/pieces/studio-backdrop/preview.jpg +0 -0
- package/assets/motion/library/pieces/tile-flip/meta.json +6 -0
- package/assets/motion/library/pieces/tile-flip/piece.html +6 -0
- package/assets/motion/library/pieces/tile-flip/preview.jpg +0 -0
- package/assets/motion/library/pieces/timeline-track/meta.json +12 -0
- package/assets/motion/library/pieces/timeline-track/piece.html +227 -0
- package/assets/motion/library/pieces/timeline-track/preview.jpg +0 -0
- package/assets/motion/library/pieces/toast-stack/meta.json +12 -0
- package/assets/motion/library/pieces/toast-stack/piece.html +185 -0
- package/assets/motion/library/pieces/toast-stack/preview.jpg +0 -0
- package/assets/motion/library/pieces/typewriter-caption/meta.json +12 -0
- package/assets/motion/library/pieces/typewriter-caption/piece.html +112 -0
- package/assets/motion/library/pieces/typewriter-caption/preview.jpg +0 -0
- package/assets/motion/library/pieces/ui-stack-3d/meta.json +12 -0
- package/assets/motion/library/pieces/ui-stack-3d/piece.html +236 -0
- package/assets/motion/library/pieces/ui-stack-3d/preview.jpg +0 -0
- package/assets/motion/library/pieces/vignette/meta.json +12 -0
- package/assets/motion/library/pieces/vignette/piece.html +85 -0
- package/assets/motion/library/pieces/vignette/preview.jpg +0 -0
- package/assets/motion/library/pieces/word-swap/meta.json +12 -0
- package/assets/motion/library/pieces/word-swap/piece.html +122 -0
- package/assets/motion/library/pieces/word-swap/preview.jpg +0 -0
- package/assets/motion/library/sheets/3d.jpg +0 -0
- package/assets/motion/library/sheets/background.jpg +0 -0
- package/assets/motion/library/sheets/data.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/looks.jpg +0 -0
- package/assets/motion/library/sheets/texture.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/type.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/plugin.json +5 -0
- package/assets/motion/references/README.md +20 -0
- package/assets/motion/references/index.json +25 -0
- package/assets/motion/references/runtime/data-attributes.md +78 -0
- package/assets/motion/references/runtime/determinism-rules.md +53 -0
- package/assets/motion/references/runtime/doctor-browser.md +57 -0
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +199 -0
- package/assets/motion/references/runtime/gsap-timeline-and-labels.md +96 -0
- package/assets/motion/references/runtime/gsap-transforms-and-perf.md +129 -0
- package/assets/motion/references/runtime/gsap.md +105 -0
- package/assets/motion/references/runtime/inputs-and-assets.md +52 -0
- package/assets/motion/references/runtime/lint-validate-inspect.md +131 -0
- package/assets/motion/references/runtime/minimal-composition.md +69 -0
- package/assets/motion/references/runtime/preview-render.md +156 -0
- package/assets/motion/references/runtime/sub-compositions.md +176 -0
- package/assets/motion/references/runtime/tracks-and-clips.md +87 -0
- package/assets/motion/references/runtime/variables-and-media.md +107 -0
- package/assets/motion/references/signal-study.html +39 -0
- package/assets/motion/references/signal-temporal.jpg +0 -0
- package/assets/motion/references/type-temporal.jpg +0 -0
- package/assets/motion/skills/brand-kit/SKILL.md +70 -0
- package/assets/motion/skills/mixkit-split-text-617/SKILL.md +115 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-480.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-494.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-5.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-508.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6525.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6539.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6647.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6663.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6677.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6691.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6706.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6722.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6736.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6750.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6764.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6780.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6794.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6810.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6823.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6872.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6936.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-76.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/manifest.json +495 -0
- package/assets/motion/skills/mixkit-split-text-617/references/RECONSTRUCTION.md +201 -0
- package/assets/motion/skills/mixkit-split-text-617/references/VERIFICATION.md +107 -0
- package/assets/motion/skills/mixkit-split-text-617/tools/inspect_motion.py +130 -0
- package/assets/motion/skills/motion/SKILL.md +102 -0
- package/assets/motion/skills/source-ingest/SKILL.md +48 -0
- package/assets/motion/skills/video-qa/SKILL.md +66 -0
- package/assets/motion/vendor/three/LICENSE +21 -0
- package/assets/motion/vendor/three/addons/environments/RoomEnvironment.js +182 -0
- package/assets/motion/vendor/three/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/assets/motion/vendor/three/addons/geometries/TextGeometry.js +84 -0
- package/assets/motion/vendor/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
- package/assets/motion/vendor/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
- package/assets/motion/vendor/three/addons/loaders/FontLoader.js +260 -0
- package/assets/motion/vendor/three/addons/loaders/GLTFLoader.js +4892 -0
- package/assets/motion/vendor/three/addons/loaders/HDRLoader.js +486 -0
- package/assets/motion/vendor/three/addons/loaders/SVGLoader.js +3267 -0
- package/assets/motion/vendor/three/addons/math/SimplexNoise.js +470 -0
- package/assets/motion/vendor/three/addons/objects/Reflector.js +338 -0
- package/assets/motion/vendor/three/addons/postprocessing/BokehPass.js +218 -0
- package/assets/motion/vendor/three/addons/postprocessing/EffectComposer.js +363 -0
- package/assets/motion/vendor/three/addons/postprocessing/FilmPass.js +113 -0
- package/assets/motion/vendor/three/addons/postprocessing/MaskPass.js +195 -0
- package/assets/motion/vendor/three/addons/postprocessing/OutputPass.js +139 -0
- package/assets/motion/vendor/three/addons/postprocessing/Pass.js +191 -0
- package/assets/motion/vendor/three/addons/postprocessing/RenderPass.js +183 -0
- package/assets/motion/vendor/three/addons/postprocessing/ShaderPass.js +135 -0
- package/assets/motion/vendor/three/addons/postprocessing/UnrealBloomPass.js +494 -0
- package/assets/motion/vendor/three/addons/renderers/CSS3DRenderer.js +454 -0
- package/assets/motion/vendor/three/addons/shaders/BokehShader.js +151 -0
- package/assets/motion/vendor/three/addons/shaders/CopyShader.js +52 -0
- package/assets/motion/vendor/three/addons/shaders/FilmShader.js +72 -0
- package/assets/motion/vendor/three/addons/shaders/LuminosityHighPassShader.js +68 -0
- package/assets/motion/vendor/three/addons/shaders/OutputShader.js +103 -0
- package/assets/motion/vendor/three/addons/utils/BufferGeometryUtils.js +1435 -0
- package/assets/motion/vendor/three/build/three.core.min.js +6 -0
- package/assets/motion/vendor/three/build/three.module.min.js +6 -0
- package/assets/motion/vendor/three/three.json +54 -0
- package/dist/app-sidecar-sessions.js +5 -0
- package/dist/app-sidecar-sessions.js.map +1 -1
- package/dist/app-sidecar.js +52 -16
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +39 -0
- package/dist/core/agent-session.js +160 -11
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.js +14 -42
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth-providers.js +6 -6
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/bundled-agents.js +9 -7
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/completion-review.d.ts +24 -0
- package/dist/core/completion-review.js +2 -0
- package/dist/core/completion-review.js.map +1 -0
- package/dist/core/context-limits.d.ts +6 -0
- package/dist/core/context-limits.js +8 -0
- package/dist/core/context-limits.js.map +1 -1
- package/dist/core/fast-apply-benchmark.d.ts +1 -1
- package/dist/core/fast-apply-benchmark.js +2 -2
- package/dist/core/fast-apply-benchmark.js.map +1 -1
- package/dist/core/frontmatter.d.ts +22 -0
- package/dist/core/frontmatter.js +90 -0
- package/dist/core/frontmatter.js.map +1 -0
- package/dist/core/lsp/pool.d.ts +2 -0
- package/dist/core/lsp/pool.js +4 -0
- package/dist/core/lsp/pool.js.map +1 -1
- package/dist/core/network-guard.d.ts +2 -0
- package/dist/core/network-guard.js +37 -0
- package/dist/core/network-guard.js.map +1 -1
- package/dist/core/project-discovery.js +3 -0
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/regrounding.d.ts +7 -0
- package/dist/core/regrounding.js +27 -0
- package/dist/core/regrounding.js.map +1 -1
- package/dist/core/semantic-search-benchmark.d.ts +1 -1
- package/dist/core/semantic-search-benchmark.js +2 -2
- package/dist/core/semantic-search-benchmark.js.map +1 -1
- package/dist/core/session-export.d.ts +2 -2
- package/dist/core/session-export.js +6 -2
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/skills.d.ts +16 -1
- package/dist/core/skills.js +40 -25
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-policy.js +1 -4
- package/dist/core/subagent-policy.js.map +1 -1
- package/dist/core/verification-evidence.js +7 -2
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +35 -0
- package/dist/motion-agent/motion-agent.js +117 -0
- package/dist/motion-agent/motion-agent.js.map +1 -0
- package/dist/motion-agent/motion-check-tool.d.ts +21 -0
- package/dist/motion-agent/motion-check-tool.js +206 -0
- package/dist/motion-agent/motion-check-tool.js.map +1 -0
- package/dist/motion-agent/motion-prompt.d.ts +2 -0
- package/dist/motion-agent/motion-prompt.js +48 -0
- package/dist/motion-agent/motion-prompt.js.map +1 -0
- package/dist/motion-agent/motion-review-coverage.d.ts +12 -0
- package/dist/motion-agent/motion-review-coverage.js +33 -0
- package/dist/motion-agent/motion-review-coverage.js.map +1 -0
- package/dist/motion-agent/motion-review-gate.d.ts +48 -0
- package/dist/motion-agent/motion-review-gate.js +88 -0
- package/dist/motion-agent/motion-review-gate.js.map +1 -0
- package/dist/motion-agent/motion-review-session.d.ts +65 -0
- package/dist/motion-agent/motion-review-session.js +418 -0
- package/dist/motion-agent/motion-review-session.js.map +1 -0
- package/dist/motion-agent/motion-review.d.ts +76 -0
- package/dist/motion-agent/motion-review.js +225 -0
- package/dist/motion-agent/motion-review.js.map +1 -0
- package/dist/motion-agent/motion-studio-context.d.ts +44 -0
- package/dist/motion-agent/motion-studio-context.js +65 -0
- package/dist/motion-agent/motion-studio-context.js.map +1 -0
- package/dist/system-prompt.d.ts +3 -0
- package/dist/system-prompt.js +5 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.js +2 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +8 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/redaction-guard.d.ts +10 -0
- package/dist/tools/redaction-guard.js +55 -0
- package/dist/tools/redaction-guard.js.map +1 -0
- package/dist/tools/steroids.d.ts +1 -1
- package/dist/tools/steroids.js +20 -4
- package/dist/tools/steroids.js.map +1 -1
- package/dist/tools/web-fetch.js +38 -32
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/write.js +12 -5
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -5
- package/dist/ui/components/Footer.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Determinism, Animation Runtime, and Layout
|
|
2
|
+
|
|
3
|
+
HyperFrames seeks compositions frame-by-frame. Every frame must be reproducible from its time value alone — same input time → same pixels. Three contracts enforce this: the **animation runtime contract**, the **determinism rules**, and the **layout contract**.
|
|
4
|
+
|
|
5
|
+
## Animation Runtime Contract
|
|
6
|
+
|
|
7
|
+
GSAP is the primary runtime. The core requirement is generic: animation state must be seekable from HyperFrames time.
|
|
8
|
+
|
|
9
|
+
For GSAP:
|
|
10
|
+
|
|
11
|
+
- Use `gsap.timeline({ paused: true })`.
|
|
12
|
+
- Register it on `window.__timelines["<composition-id>"]`, keyed by the composition root's `data-composition-id`. You do **not** need to write `window.__timelines = window.__timelines || {}` first: the runtime creates the registry before your inline scripts evaluate.
|
|
13
|
+
- **Building inside an async callback is supported.** `document.fonts.ready(...)` and friends are the documented setup path. What you must not do is **register the key before the build finishes**. An empty timeline registered early is treated as ready and nested empty, so the animation renders blank (`lint`: `gsap_timeline_registered_before_async_build`, error). Assign `window.__timelines[id] = tl` at the **end** of the callback, after the tweens are added, and optionally call `window.__hfForceTimelineRebind()` right after.
|
|
14
|
+
- If the key does not match the root's `data-composition-id`, the runtime still binds it **when it is the only registered timeline**. With two or more registered, a mismatched key leaves the render frozen at t=0.
|
|
15
|
+
- **Do not** call `tl.play()` for render-critical motion.
|
|
16
|
+
- **Do not** create empty tweens only to set duration; use `data-duration` on the clip instead.
|
|
17
|
+
|
|
18
|
+
Use the adjacent `gsap.md`, `gsap-timeline-and-labels.md` and `gsap-easing-and-stagger.md` for GSAP mechanics. These technical references do not override the selected recipe's geometry, timing or allowed input changes.
|
|
19
|
+
|
|
20
|
+
## Determinism Rules
|
|
21
|
+
|
|
22
|
+
Rendered frames must be reproducible from the requested time. Do **not** use any of the following for visual state:
|
|
23
|
+
|
|
24
|
+
- `Date.now()`, `performance.now()`, or any render-time clock.
|
|
25
|
+
- Unseeded `Math.random()`. Use a seeded PRNG if random-looking placement is needed.
|
|
26
|
+
- Render-time network fetches for required assets. Inline or pre-bundle them.
|
|
27
|
+
- Hover, scroll, pointer, or focus state. The renderer has no input events.
|
|
28
|
+
- Infinite loops such as `repeat: -1`. Compute a finite count: `repeat: Math.max(0, Math.floor(duration / cycleDuration) - 1)` — **`floor`, not `ceil`** (`ceil` overshoots `data-duration` and trips the `gsap_repeat_ceil_overshoot` lint; `max(0, …)` avoids a negative repeat = infinite).
|
|
29
|
+
|
|
30
|
+
Also avoid:
|
|
31
|
+
|
|
32
|
+
- Tweening `display`, raw `visibility`, or `autoAlpha` **on a clip element**: HyperFrames timing owns a clip's visibility, and `lint` rejects it (`gsap_animates_clip_element`). Fade with `opacity`, or tween a child wrapper. Do not tween `class="clip"`.
|
|
33
|
+
- There is no fixed allowlist of animatable properties. `lint` enforces a **denylist**, so `filter`, `clipPath`, `strokeDashoffset`, `width`, `height` and similar are all legitimate targets. Prefer transforms and opacity where you have the choice, for performance rather than correctness. See the adjacent `gsap.md` for runtime details.
|
|
34
|
+
- Animating the same property on the same element from multiple timelines at the same time — GSAP's overwrite behavior is order-dependent and can flip between renders.
|
|
35
|
+
|
|
36
|
+
## Layout Contract
|
|
37
|
+
|
|
38
|
+
Build the visible end-state in static HTML and CSS first, then animate from/to that state.
|
|
39
|
+
|
|
40
|
+
- The composition root has fixed pixel frame dimensions.
|
|
41
|
+
- **The root composition's total duration (render length / frame count) is fixed at compile time**, read once from the static root `data-duration` before scripts run, like `data-width` / `data-height`. A script or `--variables` value that rewrites the root `data-duration` afterward is ignored. To vary render length per output, author the root `data-duration` directly. (A _clip's_ own `data-duration` is re-read from the live DOM, so scripts/variables can still drive clip lengths. Only when the root omits `data-duration` does the renderer probe the live DOM / timeline for total length.)
|
|
42
|
+
- Scene containers should fill the scene with `width: 100%; height: 100%; box-sizing: border-box`.
|
|
43
|
+
- Use padding, flex, grid, and `max-width` for layout. Avoid positioning main content with hardcoded `top`/`left` offsets when a layout container can do it.
|
|
44
|
+
- Preserve the recipe's positioning model. Absolute layers are appropriate when reproducing authored source geometry; generic layout preferences must not alter it.
|
|
45
|
+
- Prefer transforms and opacity for animation.
|
|
46
|
+
- Keep text inside its intended container. Only use wrapping, resizing or `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })` when the recipe permits that fit policy; otherwise resolve the input conflict.
|
|
47
|
+
- For text measurement without DOM reflow, use `window.__hyperframes.pretext`. Measure off a canvas instead of writing into the page and reading it back, so nothing reflows: `pretext.prepare(text, font)` then `pretext.layout(prepared, maxWidth, lineHeight)` → `{ lineCount, height }`. `prepare` does the font measurement; everything downstream of a prepared string is arithmetic and cheap enough to run per frame. `fitTextFontSize` is built on it.
|
|
48
|
+
- `layout` gives you height, not width. To size a container to its text (shrinkwrap), use `pretext.prepareWithSegments(text, font)` and then `pretext.measureNaturalWidth(prepared)` for the single-line width, or `pretext.measureLineStats(prepared, maxWidth)` for `{ lineCount, maxLineWidth }`.
|
|
49
|
+
- `font` is a CSS font shorthand string, e.g. `"700 90px Inter"`.
|
|
50
|
+
- `clearCache` and `setLocale` are deliberately not exposed: they mutate state shared across compositions, which would make a render depend on what ran before it.
|
|
51
|
+
- **Do not** use `<br>` in body text. Forced breaks ignore the actual rendered font width and produce an extra break when the line already wraps naturally, causing overlap. Let text wrap via `max-width`. Exception: short display titles where each word is deliberately on its own line.
|
|
52
|
+
- **Transformed elements must be block-level + sized.** `transform`/`scaleX`/`scaleY` is a no-op on an inline `<span>`, and scaling an auto-width (0px) element shows nothing → invisible bars/fills. Give them `display: block`/`inline-block`/flex-item **and** a real `width`/`height` (e.g. `width: 100%` inside a sized parent). _(Silent — automated gates may miss it.)_
|
|
53
|
+
- **Absolutely-positioned decoratives that pulse or overshoot** (`yoyo` scale, `back.out`) need clearance at their **peak** size and must not straddle an `overflow: hidden` edge — else they overlap a neighbor or get clipped. Position for the largest frame, not the resting one. _(silent.)_
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# doctor, browser
|
|
2
|
+
|
|
3
|
+
Environment diagnosis and bundled-Chrome management. Run these first when a render or preview fails.
|
|
4
|
+
|
|
5
|
+
## doctor
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
hf doctor
|
|
9
|
+
hf doctor --json # CI / agent output (always exit 0; gate on payload `ok`)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Runs independent checks and reports each as ok/warn/fail:
|
|
13
|
+
|
|
14
|
+
- **Version** — installed CLI vs latest on npm (hints upgrade when stale)
|
|
15
|
+
- **Node.js** — ≥ 22 required
|
|
16
|
+
- **CPU**, **Memory**, **Disk** — host resources
|
|
17
|
+
- **Environment** — env vars that affect the renderer
|
|
18
|
+
- **FFmpeg** / **FFprobe** — found, version, codecs
|
|
19
|
+
- **Chrome** — bundled or system, version, path
|
|
20
|
+
- **Docker** / **Docker running** — required only for `render --docker`
|
|
21
|
+
- **/dev/shm** — inside containers only
|
|
22
|
+
|
|
23
|
+
Run `doctor` first when:
|
|
24
|
+
|
|
25
|
+
- `render` fails with a Chrome or FFmpeg error.
|
|
26
|
+
- `preview` opens but the composition fails to load.
|
|
27
|
+
- A fresh machine has never run HyperFrames.
|
|
28
|
+
|
|
29
|
+
Common issues:
|
|
30
|
+
|
|
31
|
+
- **Missing FFmpeg** — report the setup blocker and ask before installing software; use an existing compatible binary when available.
|
|
32
|
+
- **Missing bundled Chrome** — run `hf browser ensure`.
|
|
33
|
+
- **Low memory** — close other Chromes, reduce `--workers`, or use `--quality draft`.
|
|
34
|
+
- **Chrome exits instantly inside an agent sandbox (macOS)** — seatbelt-style sandboxes
|
|
35
|
+
(e.g. codex `workspace-write`) block Chromium's Mach port bootstrap
|
|
36
|
+
(`MachPortRendezvous`; openai/codex#21292), so every Chrome — bundled, system, or
|
|
37
|
+
headless shell — dies at startup. This is a host-level block, not a HyperFrames or
|
|
38
|
+
Chrome install problem: compile checks and audio still pass, only rendering is
|
|
39
|
+
unavailable. State the blocker and deliver the checked composition; render outside the
|
|
40
|
+
sandbox only through an authorized route. Do not weaken the sandbox or upload files to cloud rendering without explicit permission. **Do not build a
|
|
41
|
+
substitute rasterizer** (magick/PIL/SVG frame pipelines) — on a blocked-browser host
|
|
42
|
+
the deliverable IS the checked composition plus this blocker note, and rendering is
|
|
43
|
+
handed to `--docker`, cloud, or the user. Write your final summary the moment the
|
|
44
|
+
blocker is identified, BEFORE any optional fallback work: a later session failure must
|
|
45
|
+
not erase the report of work already done.
|
|
46
|
+
|
|
47
|
+
## browser
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
hf browser ensure # find or download the pinned Chrome
|
|
51
|
+
hf browser path # print the browser executable path (for scripting)
|
|
52
|
+
hf browser clear # remove the cached Chrome download
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Manage the Chrome build HyperFrames uses for rendering. The pinned version exists because pixel output drifts across Chrome versions — using the bundled build keeps rendered output reproducible across machines.
|
|
56
|
+
|
|
57
|
+
Use `path` to embed the binary in scripts: `$(hf browser path)`.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Easing, Stagger, and Function-Based Values
|
|
2
|
+
|
|
3
|
+
## Easing
|
|
4
|
+
|
|
5
|
+
Built-in eases: `power1`, `power2`, `power3`, `power4`, `back`, `bounce`, `circ`, `elastic`, `expo`, `sine`, `none`.
|
|
6
|
+
|
|
7
|
+
Each has `.in`, `.out`, `.inOut` variants.
|
|
8
|
+
|
|
9
|
+
| Ease | Use for |
|
|
10
|
+
| ------------------------------------------ | ----------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `power1.out`, `power2.out` | Gentle motion for secondary elements (a caption fade, a small shift). NOT the entrance default. |
|
|
12
|
+
| `power3.out` (house default), `power4.out` | The standard long-tail settle. Entrances, title cards, hero reveals. |
|
|
13
|
+
| `sine.inOut` | Long, slow, calm motion. Crossfades, ambient drift. |
|
|
14
|
+
| `back.out(1.7)` | Overshoot then settle. RARE — explicitly-playful register only, never a default. |
|
|
15
|
+
| `elastic.out(1, 0.3)` | Springy bounce. Same playful-only rule; prefer a baked spring (see Spring Eases below). |
|
|
16
|
+
| `expo.inOut` | Snappy, dramatic. Quick transitions between hero scenes. |
|
|
17
|
+
| `none` (linear) | Camera moves with timed counterpoint, mechanical motion. |
|
|
18
|
+
|
|
19
|
+
Pick `.out` for entrances, `.in` for exits, `.inOut` for symmetric moves and continuous motion.
|
|
20
|
+
|
|
21
|
+
**Smooth beats bouncy** — the motion doctrine (`rules/spring-pop-entrance.md`, the workflows' `motion-language.md`): entrances default to `power3.out` or the baked critically-damped spring (see Spring Eases below); overshoot eases (`back` / `elastic` / `bounce`) are a rare, explicitly-playful register, never the house style.
|
|
22
|
+
|
|
23
|
+
## Easing Vocabulary (character & mood)
|
|
24
|
+
|
|
25
|
+
Easings are tone of voice: a video that only whispers is boring; one that varies between whisper, normal, and punch is engaging. A composition should draw on ~3 easing characters across its beats — but vary **within the smooth families by energy** (`sine` / `power1` calm → `power3` standard → `power4` / `expo` punch); don't reach for overshoot to add variety. Overshoot is a _register_ (explicitly playful), not a spice. One ease everywhere reads flat; bounce everywhere reads cheap — the second failure is worse.
|
|
26
|
+
|
|
27
|
+
The full palette by character (each family has `.in`, `.out`, `.inOut` variants):
|
|
28
|
+
|
|
29
|
+
| Family | Character | Typical use |
|
|
30
|
+
| -------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `power1`–`power4` | Gentle (1) to aggressive (4) acceleration curves | General purpose. **power3 is the house workhorse**; power2 for gentle secondary motion, power4 for dramatic snaps |
|
|
32
|
+
| `back(N)` | Overshoot then settle. N controls how far past the target (1=subtle, 4=wild) | RARE — explicitly-playful register only, never a default. Keep N ≤ 2; prefer a baked spring at ζ 0.6–0.7 (physical settle, see Spring Eases) |
|
|
33
|
+
| `elastic(amp, freq)` | Spring bounce. amp=magnitude, freq=oscillation speed | RARE — same playful-only rule; the baked spring (below) is the physical version |
|
|
34
|
+
| `bounce` | Ball-drop bouncing | RARE — physical-comedy register only (something literally dropping) |
|
|
35
|
+
| `expo` | Extreme acceleration curve (much steeper than power4) | Premium/luxury reveals, dramatic entrances |
|
|
36
|
+
| `sine` | Smooth, organic, no hard edges | Ambient float, breathing, Ken Burns, anything that loops. `.inOut` for yoyo motion |
|
|
37
|
+
| `circ` | Circular acceleration (starts very fast, ends very gentle or vice versa) | Camera moves, scene transitions, orbital motion |
|
|
38
|
+
| `steps(N)` | Discrete N-step jumps, no interpolation | Typing effects, cursor blink, counter ticks, retro/digital aesthetics |
|
|
39
|
+
|
|
40
|
+
**Mood mapping:** Match easing character to the beat's emotional content. Smooth/organic easings (`sine`, `power1`) feel contemplative and drifting. Aggressive deceleration (`power4.out`, `expo.out`) feels snappy and confident. Spring overshoot (`back.out`) feels bouncy and physical — but bouncy is a register, not an emphasis tool; reach for it only on explicitly-playful beats. The storyboard's mood description should guide which character fits — not a formula.
|
|
41
|
+
|
|
42
|
+
## Defaults
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
const tl = gsap.timeline({
|
|
46
|
+
paused: true,
|
|
47
|
+
defaults: { duration: 0.6, ease: "power3.out" }, // the house settle — smooth beats bouncy
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Or globally:
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
gsap.defaults({ duration: 0.6, ease: "power3.out" });
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Setting defaults at timeline scope is preferred — it documents the motion language of that composition in one place.
|
|
58
|
+
|
|
59
|
+
## Spring Eases (baked physics, seek-safe)
|
|
60
|
+
|
|
61
|
+
The "iOS feel" is a **damped spring's velocity curve**, not a bounce: a fast launch into a long asymptotic settle. Well-made system animations are critically damped or close to it — they barely overshoot, or don't at all. `power3.out` / `expo.out` approximate that curve; when you want the exact one — or a _physical_ overshoot for the rare playful register — bake the spring's closed-form solution into a function ease.
|
|
62
|
+
|
|
63
|
+
Why not a real-time spring library: an interactive spring is a stateful integrator (velocity accumulates frame to frame), which cannot be seeked deterministically — you'd have to simulate frames 0…N−1 to render frame N. The closed form below is a **pure function of progress** — no state, nothing to desync, seek-safe by construction. This is also why interaction-lib spring solvers are banned in compositions.
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// springEase — a damped spring's exact position curve as a GSAP ease.
|
|
67
|
+
// response ≈ seconds one oscillation would take (0.3–0.6 for entrances)
|
|
68
|
+
// dampingFraction 1.0 = critically damped — smooth settle, NO overshoot (house default)
|
|
69
|
+
// 0.80–0.85 ≈ the iOS system register — ~1–1.5% overshoot, felt not seen
|
|
70
|
+
// 0.60–0.70 = explicitly playful — ~5–10% overshoot (rare; replaces back.out)
|
|
71
|
+
function springEase({ response = 0.5, dampingFraction = 1 } = {}) {
|
|
72
|
+
const w = (2 * Math.PI) / response; // undamped natural frequency
|
|
73
|
+
const z = dampingFraction;
|
|
74
|
+
let pos; // x(t): 0 → 1, starting at rest (v0 = 0)
|
|
75
|
+
if (z < 1) {
|
|
76
|
+
const wd = w * Math.sqrt(1 - z * z);
|
|
77
|
+
pos = (t) => 1 - Math.exp(-z * w * t) * (Math.cos(wd * t) + ((z * w) / wd) * Math.sin(wd * t));
|
|
78
|
+
} else if (z > 1) {
|
|
79
|
+
const wo = w * Math.sqrt(z * z - 1);
|
|
80
|
+
pos = (t) =>
|
|
81
|
+
1 - Math.exp(-z * w * t) * (Math.cosh(wo * t) + ((z * w) / wo) * Math.sinh(wo * t));
|
|
82
|
+
} else {
|
|
83
|
+
pos = (t) => 1 - Math.exp(-w * t) * (1 + w * t);
|
|
84
|
+
}
|
|
85
|
+
// Settle time: last moment the curve sits outside ±0.1% of target.
|
|
86
|
+
// Fixed-step scan, runs once at setup — deterministic (no Math.random / Date.now).
|
|
87
|
+
const EPS = 0.001;
|
|
88
|
+
const rate = z <= 1 ? z * w : (z - Math.sqrt(z * z - 1)) * w; // slowest decay mode
|
|
89
|
+
const SCAN = 12 / rate;
|
|
90
|
+
const N = 4800;
|
|
91
|
+
let T = SCAN;
|
|
92
|
+
for (let i = N; i >= 0; i--) {
|
|
93
|
+
const t = (i / N) * SCAN;
|
|
94
|
+
if (Math.abs(1 - pos(t)) > EPS) {
|
|
95
|
+
T = ((i + 1) / N) * SCAN;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const xT = pos(T);
|
|
100
|
+
return {
|
|
101
|
+
duration: T, // use as the tween's duration — the settle time IS the physics
|
|
102
|
+
ease: (p) => pos(p * T) + p * (1 - xT), // normalized so ease(1) === 1 exactly
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Usage — take **both** the ease and the duration from the helper (the settle time is part of the physics; overriding the duration just re-times the same curve, so tune speed via `response` instead):
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
const settle = springEase({ response: 0.4 }); // critically damped → duration ≈ 0.59s
|
|
111
|
+
tl.fromTo(
|
|
112
|
+
"#hero",
|
|
113
|
+
{ scale: 0, opacity: 0 },
|
|
114
|
+
{ scale: 1, opacity: 1, duration: settle.duration, ease: settle.ease },
|
|
115
|
+
0.2,
|
|
116
|
+
);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| dampingFraction | overshoot | register |
|
|
120
|
+
| ----------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
121
|
+
| **1.0 (default)** | none (monotone) | The house settle — the exact curve `power3.out` approximates. Product / enterprise / serious tone. |
|
|
122
|
+
| 0.80–0.85 | ~1–1.5% | "Alive, not bouncy" — the iOS system default register. The overshoot is felt, not seen. |
|
|
123
|
+
| 0.60–0.70 | ~5–10% | Explicitly-playful ONLY (same rule as `back.out`, which this replaces — a spring's second-order settle reads physical where `back` reads cartoon). |
|
|
124
|
+
| < 0.55 | > 12% | Don't. Cartoon-wobble territory. |
|
|
125
|
+
|
|
126
|
+
| response | duration (ζ=1) | feel |
|
|
127
|
+
| --------- | -------------- | ------------------------------------------------------------ |
|
|
128
|
+
| 0.25–0.35 | 0.37–0.51s | tight snap — chips, small UI |
|
|
129
|
+
| 0.35–0.50 | 0.51–0.74s | standard entrance |
|
|
130
|
+
| 0.50–0.70 | 0.74–1.03s | weighted hero landing — check the `t ≤ 0.5s` visibility rule |
|
|
131
|
+
|
|
132
|
+
Craft notes:
|
|
133
|
+
|
|
134
|
+
- **ζ=1 vs `power3.out`**: the true spring front-loads harder (~67% vs ~58% travelled at quarter-time) and settles on a longer asymptotic tail; max shape difference ~11%. That long tail is the "premium" read — use it when the settle IS the shot (a wordmark landing, a final lockup).
|
|
135
|
+
- **At ζ<1, overshooting curves go on transforms only** — never on `opacity` (it would push past 1) or color. Split opacity onto its own `power2.out` tween at the same timeline position.
|
|
136
|
+
- **Doctrine unchanged**: ζ below ~0.8 is still the rare, explicitly-playful exception (`rules/spring-pop-entrance.md`). The default of this section is ζ=1 — real spring physics is not a license for bounce.
|
|
137
|
+
|
|
138
|
+
## Stagger
|
|
139
|
+
|
|
140
|
+
```javascript
|
|
141
|
+
gsap.fromTo(".item", { y: 24, opacity: 0 }, { y: 0, opacity: 1, duration: 0.5, stagger: 0.08 });
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Object form:
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
gsap.fromTo(
|
|
148
|
+
".item",
|
|
149
|
+
{ y: 24, opacity: 0 },
|
|
150
|
+
{
|
|
151
|
+
y: 0,
|
|
152
|
+
opacity: 1,
|
|
153
|
+
stagger: {
|
|
154
|
+
each: 0.08, // delay between each
|
|
155
|
+
from: "center", // "start" | "end" | "center" | "edges" | "random" | index
|
|
156
|
+
amount: 0.6, // total stagger time (overrides each if both set)
|
|
157
|
+
grid: "auto", // for 2D stagger
|
|
158
|
+
axis: "x" | "y",
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Prefer `stagger` over N separate tweens with manual delays — it stays correct when the target count or order changes. Use `fromTo()` rather than `from()` so the start state is explicit (see `gsap-timeline-and-labels.md` → sub-composition entrances).
|
|
165
|
+
|
|
166
|
+
## Function-Based Values
|
|
167
|
+
|
|
168
|
+
Any var can be a function `(index, target, targets) => value`:
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
gsap.to(".item", {
|
|
172
|
+
x: (i, target, targets) => i * 50,
|
|
173
|
+
rotation: (i) => (i % 2 === 0 ? 5 : -5),
|
|
174
|
+
stagger: 0.1,
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Use this for per-element values that depend on index, attributes, or measured size. Cheaper and more idiomatic than building tweens in a loop.
|
|
179
|
+
|
|
180
|
+
## gsap.matchMedia (preview only)
|
|
181
|
+
|
|
182
|
+
`matchMedia` runs setup only when a media query matches and auto-reverts when it stops matching. It is useful for **preview** in the browser at different viewport sizes, and for `prefers-reduced-motion`. It is **not** a substitute for rendering at the composition's actual `data-width`/`data-height` — HyperFrames renders at a fixed viewport.
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
let mm = gsap.matchMedia();
|
|
186
|
+
mm.add(
|
|
187
|
+
{
|
|
188
|
+
isDesktop: "(min-width: 800px)",
|
|
189
|
+
reduceMotion: "(prefers-reduced-motion: reduce)",
|
|
190
|
+
},
|
|
191
|
+
(context) => {
|
|
192
|
+
const { isDesktop, reduceMotion } = context.conditions;
|
|
193
|
+
gsap.to(".box", {
|
|
194
|
+
rotation: isDesktop ? 360 : 180,
|
|
195
|
+
duration: reduceMotion ? 0 : 2,
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
);
|
|
199
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Timelines and Labels
|
|
2
|
+
|
|
3
|
+
HyperFrames is a seek-driven runtime. Build one paused timeline per composition, attach it to `window.__timelines["<composition-id>"]`, and let HyperFrames seek it. Never call `.play()` for render-critical motion.
|
|
4
|
+
|
|
5
|
+
## Creating a Timeline
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
const tl = gsap.timeline({
|
|
9
|
+
paused: true,
|
|
10
|
+
defaults: { duration: 0.5, ease: "power3.out" },
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
tl.to(".a", { x: 100 }).to(".b", { y: 50 }).to(".c", { opacity: 0 });
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Timeline options:
|
|
17
|
+
|
|
18
|
+
- **paused: true** — required in HyperFrames. The framework drives the playhead.
|
|
19
|
+
- **repeat**, **yoyo** — apply to the whole timeline. `repeat: -1` is forbidden; use finite counts.
|
|
20
|
+
- **defaults** — vars merged into every child tween. Use this instead of repeating `ease` and `duration` on every line.
|
|
21
|
+
|
|
22
|
+
## Position Parameter
|
|
23
|
+
|
|
24
|
+
The third argument to `.to()`/`.from()`/`.fromTo()` controls placement on the timeline:
|
|
25
|
+
|
|
26
|
+
| Form | Meaning |
|
|
27
|
+
| -------------- | ------------------------------------ |
|
|
28
|
+
| `0`, `1.5` | Absolute time in seconds |
|
|
29
|
+
| `"+=0.5"` | 0.5s after the end of the timeline |
|
|
30
|
+
| `"-=0.2"` | 0.2s before the end of the timeline |
|
|
31
|
+
| `"intro"` | At the `intro` label |
|
|
32
|
+
| `"intro+=0.3"` | 0.3s after the `intro` label |
|
|
33
|
+
| `"<"` | Same start as the previous tween |
|
|
34
|
+
| `">"` | Right after the previous tween ends |
|
|
35
|
+
| `"<0.2"` | 0.2s after the previous tween starts |
|
|
36
|
+
| `">-0.1"` | 0.1s before the previous tween ends |
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
tl.to(".a", { x: 100 }, 0);
|
|
40
|
+
tl.to(".b", { y: 50 }, "<"); // same start as .a
|
|
41
|
+
tl.to(".c", { opacity: 0 }, "<0.2"); // 0.2s after .b starts
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Prefer the position parameter over `delay:` — it composes naturally and survives refactors that re-order tweens.
|
|
45
|
+
|
|
46
|
+
## Labels
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
tl.addLabel("intro", 0);
|
|
50
|
+
tl.to(".a", { x: 100 }, "intro");
|
|
51
|
+
|
|
52
|
+
tl.addLabel("outro", "+=0.5");
|
|
53
|
+
tl.to(".a", { opacity: 0 }, "outro");
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Labels make a long timeline readable and let multiple tweens converge on the same beat without re-typing absolute times.
|
|
57
|
+
|
|
58
|
+
## Nesting Timelines
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
const master = gsap.timeline({ paused: true });
|
|
62
|
+
|
|
63
|
+
const child = gsap.timeline();
|
|
64
|
+
child.to(".a", { x: 100 }).to(".b", { y: 50 });
|
|
65
|
+
|
|
66
|
+
master.add(child, 0);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
In HyperFrames, **do not** nest sub-composition timelines into the host. Sub-compositions loaded via `data-composition-src` are seeked independently by HyperFrames from their own `data-start`. Nesting is only for grouping pieces of the _same_ composition's timeline.
|
|
70
|
+
|
|
71
|
+
## Inside Sub-Compositions: prefer `fromTo` over `from`
|
|
72
|
+
|
|
73
|
+
For entrance tweens inside a sub-composition, prefer `gsap.fromTo()` over `gsap.from()`:
|
|
74
|
+
|
|
75
|
+
```javascript
|
|
76
|
+
// Sub-composition entrance — survives re-seek cleanly
|
|
77
|
+
tl.fromTo(".title", { y: 60, opacity: 0 }, { y: 0, opacity: 1, duration: 0.6 }, 0.2);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Why: HyperFrames re-seeks the sub-composition every time its host clip becomes visible. `gsap.from()` snapshots the starting state at **registration time** (page load); when the playhead jumps back past `data-start`, that snapshot can desync from the actual CSS state and the element renders in the wrong position. `gsap.fromTo()` declares both endpoints explicitly, so the seek-back always produces the same start state.
|
|
81
|
+
|
|
82
|
+
In top-level (standalone) compositions either form works — there's no re-seek-through-mount cycle.
|
|
83
|
+
|
|
84
|
+
## Playback Control (debug / preview only)
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
tl.play();
|
|
88
|
+
tl.pause();
|
|
89
|
+
tl.reverse();
|
|
90
|
+
tl.restart();
|
|
91
|
+
tl.time(2);
|
|
92
|
+
tl.progress(0.5);
|
|
93
|
+
tl.kill();
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
These are useful when previewing in the browser. In rendered output HyperFrames calls `seek()` internally — your timeline must produce identical state for the same time value every time it is seeked.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Transforms and Performance
|
|
2
|
+
|
|
3
|
+
## Transform Aliases
|
|
4
|
+
|
|
5
|
+
Prefer GSAP's transform aliases over raw `transform` strings:
|
|
6
|
+
|
|
7
|
+
| GSAP property | Equivalent |
|
|
8
|
+
| --------------------------- | --------------------- |
|
|
9
|
+
| `x`, `y`, `z` | `translateX/Y/Z` (px) |
|
|
10
|
+
| `xPercent`, `yPercent` | `translateX/Y` in `%` |
|
|
11
|
+
| `scale`, `scaleX`, `scaleY` | `scale` |
|
|
12
|
+
| `rotation` | `rotate` (deg) |
|
|
13
|
+
| `rotationX`, `rotationY` | 3D rotate |
|
|
14
|
+
| `skewX`, `skewY` | `skew` |
|
|
15
|
+
| `transformOrigin` | `transform-origin` |
|
|
16
|
+
|
|
17
|
+
Aliases let GSAP track and interpolate each axis independently, which prevents accidental overwrites between separate tweens on the same element.
|
|
18
|
+
|
|
19
|
+
## autoAlpha
|
|
20
|
+
|
|
21
|
+
Prefer `autoAlpha` over `opacity` for show/hide:
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
gsap.to(".panel", { autoAlpha: 0, duration: 0.4 });
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`autoAlpha: 0` sets both `opacity: 0` and `visibility: hidden`, which removes the element from hit-testing and accessibility tree at zero alpha — closer to "gone" than plain `opacity: 0`. The registered seekable timeline still interpolates only opacity; visibility changes at the hidden endpoint. Use `autoAlpha` only on non-clip elements or wrappers inside a clip; HyperFrames owns `.clip` visibility. Never duration-tween raw `visibility` or `display`.
|
|
28
|
+
|
|
29
|
+
## clearProps
|
|
30
|
+
|
|
31
|
+
Removes inline styles set by GSAP when the tween completes:
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
gsap.to(".item", { x: 100, rotation: 45, clearProps: "all" });
|
|
35
|
+
gsap.to(".item", { x: 100, rotation: 45, clearProps: "rotation,x" });
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Useful at the end of an animation segment to hand the element back to CSS.
|
|
39
|
+
|
|
40
|
+
## CSS Variables
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
gsap.to(".chart", { "--hue": 180, duration: 1 });
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Animate any custom property. Works for color, length, number — anything CSS will interpolate.
|
|
47
|
+
|
|
48
|
+
## Relative and Directional Values
|
|
49
|
+
|
|
50
|
+
- Relative: `"+=20"`, `"-=10"`, `"*=2"`.
|
|
51
|
+
- Directional rotation: `"360_cw"`, `"-170_short"`, `"90_ccw"` — controls which way the angle takes when going between two values.
|
|
52
|
+
|
|
53
|
+
## SVG Specifics
|
|
54
|
+
|
|
55
|
+
- `svgOrigin` sets transform origin in the SVG's global coordinate space (not the element's local box). **Do not** combine `svgOrigin` with `transformOrigin` on the same element — pick one.
|
|
56
|
+
- Animate SVG transform attributes via the same alias names (`x`, `y`, `rotation`) — GSAP handles the SVG-specific quirks.
|
|
57
|
+
- **Resolve SVG geometry before building center-based transforms.** `createElementNS` is supported, but a detached, hidden, or zero-size element may not expose usable geometry when GSAP resolves a percentage `transformOrigin`. Attach and size the SVG before constructing the timeline, use an explicit `svgOrigin` when you know the canvas coordinates, or draw animated geometry around local `(0,0)` inside a positioning `<g>` for a center pivot that does not depend on a measured bounding box.
|
|
58
|
+
|
|
59
|
+
## Performance Rules
|
|
60
|
+
|
|
61
|
+
### Animate transforms, not layout properties
|
|
62
|
+
|
|
63
|
+
Animate `x`, `y`, `scale`, `rotation`, `opacity`. Never animate `left`, `right`, `top`, `bottom`, `width`, `height`, `margin*`, the text-reflow props `letterSpacing` / `wordSpacing` / `fontSize` — and never `roundProps`.
|
|
64
|
+
|
|
65
|
+
This is a **render-correctness** rule in HyperFrames, not just a GPU-performance nicety. The renderer seeks frame-by-frame and screenshots each frame, and the browser compositor snaps layout properties to whole device pixels. On a fast tween the per-frame step is several pixels, so the snap is invisible; on a slow tween or a long ease-out tail the value moves less than a pixel per frame — it holds the same pixel for several frames, then jumps a whole one. The result is motion that looks smooth when fast but visibly stutters when slow. Transforms interpolate sub-pixel and stay smooth at any speed. `roundProps` forces the same integer snap onto a transform — don't use it.
|
|
66
|
+
|
|
67
|
+
"Layout property" is broader than position: anything that triggers **reflow** snaps the same way. `letterSpacing` / `fontSize` are the common trap — a slow "settle" that crawls one of them by a fraction of a pixel per frame dwells on a handful of discrete glyph layouts (visible micro-stutter). The faithful smooth fix depends on which property — **do not reach for `scale` reflexively**:
|
|
68
|
+
|
|
69
|
+
- **`fontSize`** → animate `scale`. Scaling text up/down is the same visual and stays sub-pixel smooth (no reflow).
|
|
70
|
+
- **`letterSpacing` / `wordSpacing`** → uniform `scale` is **not** the same effect (it resizes the glyphs; it does not change the gaps between them). To animate spacing smoothly, split the text into per-character (or per-word) elements and animate each one's `x` — the glyph spread is a transform, sub-pixel smooth and visually identical to a letter-spacing tween. GSAP's `SplitText` does the split. If the spacing change is a minor flourish, hold the final value statically instead.
|
|
71
|
+
|
|
72
|
+
Unlike positional props, reflow props snap during browser **layout** — upstream of the canvas raster — so they stutter even in html-in-canvas, and the exception below does **not** apply to them.
|
|
73
|
+
|
|
74
|
+
#### Fixing a flagged animation — preserve the intent
|
|
75
|
+
|
|
76
|
+
The lint rule tells you a property will stutter; it does **not** tell you the fix, and a fix that merely passes lint can silently change the look. Swapping a `letterSpacing` tighten for a uniform `scale` lints clean but animates a _different thing_ (it resizes the glyphs instead of closing the gaps). Two rules:
|
|
77
|
+
|
|
78
|
+
1. **Reproduce the same visual** — same start/end state, same trajectory, only sub-pixel-smooth. Use the faithful equivalent (per-glyph `x` for spacing, `scale` for `fontSize`, `x`/`y` for position), not whichever transform is the least code.
|
|
79
|
+
2. **Verify against the original, not against the linter.** Render the original and the fixed version and compare the motion at its key moments — the fix should differ only by the removed stutter, not by _where things end up_. Lint-clean-and-smooth is not the bar; faithful-and-smooth is.
|
|
80
|
+
|
|
81
|
+
If the faithful fix is non-trivial (a per-glyph split, a measured offset), build it or surface the tradeoff — never downgrade to a cheaper, different effect just to satisfy the linter.
|
|
82
|
+
|
|
83
|
+
**Convert a position animation to a transform** by leaving the element at its resting `left`/`top` in CSS and animating the _offset_ with `x`/`y`:
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
// CSS: #card { left: 1340px; top: 540px } ← resting position stays in CSS
|
|
87
|
+
tl.to("#card", { left: 1340, top: 540, duration: 1 }); // ✗ stutters
|
|
88
|
+
tl.fromTo("#card", { x: 640, y: 0 }, { x: 0, y: 0, duration: 1 }); // ✓ x/y = delta from CSS rest (640 = startLeft − 1340)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
For a parent-relative `left: "100%"` sweep, use `xPercent: 100` only when the element is the full width of its container; otherwise convert to pixels (`x: containerWidth`).
|
|
92
|
+
|
|
93
|
+
**The one exception:** elements drawn through the html-in-canvas API — those under a `<canvas layoutsubtree>` ancestor, e.g. the `liquid-glass-*` blocks. The canvas rasterizes from sub-pixel `getComputedStyle`, so layout props don't snap there and those elements keep `left`/`top`. Everything the browser lays out (plain DOM) follows the rule.
|
|
94
|
+
|
|
95
|
+
The `gsap_non_transform_motion` lint rule is the backstop, not the teacher — reach for transforms from the start instead of animating layout props and waiting for lint to reject them.
|
|
96
|
+
|
|
97
|
+
### will-change (sparingly)
|
|
98
|
+
|
|
99
|
+
```css
|
|
100
|
+
.title {
|
|
101
|
+
will-change: transform;
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Only on elements that _actually_ animate. Applied everywhere it becomes useless and burns memory.
|
|
106
|
+
|
|
107
|
+
### gsap.quickTo for frequent updates (preview-only)
|
|
108
|
+
|
|
109
|
+
For high-frequency updates driven by **events** — pointer move, scroll, audio scrub — `quickTo` reuses the same tween instead of creating a new one each frame:
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
const xTo = gsap.quickTo("#cursor", "x", { duration: 0.4, ease: "power3" });
|
|
113
|
+
const yTo = gsap.quickTo("#cursor", "y", { duration: 0.4, ease: "power3" });
|
|
114
|
+
|
|
115
|
+
container.addEventListener("mousemove", (e) => {
|
|
116
|
+
xTo(e.pageX);
|
|
117
|
+
yTo(e.pageY);
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
> **Render mode has no input events.** The renderer seeks frame-by-frame; `mousemove`, `scroll`, etc. never fire. `quickTo`'s main use case applies in **live preview** in the browser only. For audio-reactive motion in renders, pre-extract audio data and drive the timeline declaratively (see `../rules/gsap-effects.md`).
|
|
122
|
+
|
|
123
|
+
### Stagger beats N tweens
|
|
124
|
+
|
|
125
|
+
One tween with `stagger` beats N tweens with manual delays for both readability and runtime cost.
|
|
126
|
+
|
|
127
|
+
### Cleanup
|
|
128
|
+
|
|
129
|
+
In live preview, pause or `kill()` off-screen animations. Render mode is unaffected (the renderer drives time directly).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hyperframes-gsap-adapter
|
|
3
|
+
description: GSAP animation API reference for HyperFrames. Use when writing seekable GSAP timelines in HyperFrames compositions, including gsap.to(), from(), fromTo(), set(), timeline position parameters, labels, easing, stagger, finite repeats, and transform performance.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# HyperFrames GSAP
|
|
7
|
+
|
|
8
|
+
GSAP usage scoped to HyperFrames' seek-driven render model. This technical reference does not choose choreography. See `minimal-composition.md` and `determinism-rules.md` for the composition contract.
|
|
9
|
+
|
|
10
|
+
## HyperFrames Contract
|
|
11
|
+
|
|
12
|
+
HyperFrames controls GSAP through its `gsap` runtime adapter. Create a paused timeline synchronously, register it on `window.__timelines` with the exact `data-composition-id`, and let HyperFrames seek it.
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
16
|
+
<script>
|
|
17
|
+
window.__timelines = window.__timelines || {};
|
|
18
|
+
const tl = gsap.timeline({ paused: true });
|
|
19
|
+
|
|
20
|
+
tl.from(".title", { y: 48, opacity: 0, duration: 0.6, ease: "power3.out" }, 0);
|
|
21
|
+
tl.to(".accent", { scaleX: 1, duration: 0.5, ease: "power2.out" }, 0.25);
|
|
22
|
+
|
|
23
|
+
window.__timelines["main"] = tl; // key must equal data-composition-id on the composition root
|
|
24
|
+
</script>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- The registry key must match the composition root's `data-composition-id`.
|
|
28
|
+
- Bracket and dot syntax both register: `window.__timelines["main"] = tl` and `window.__timelines.main = tl` are equivalent (the linter recognizes both). Bracket form is required when the id isn't a valid identifier (e.g. contains `-`).
|
|
29
|
+
- Do not call `tl.play()` for render-critical motion.
|
|
30
|
+
- Building inside an async callback such as `document.fonts.ready` is supported and common. What breaks is **registering the key before the build finishes**: an empty timeline registered early is treated as ready and nested empty, so it renders blank (`lint`: `gsap_timeline_registered_before_async_build`, error). Assign `window.__timelines[id] = tl` at the end of the callback. Do not drive render-critical motion from timers or event handlers.
|
|
31
|
+
- Keep loops finite. HyperFrames renders finite video durations.
|
|
32
|
+
- **Render duration comes from `data-duration` on the composition root, not from GSAP timeline length.** Do not pad the timeline with empty tweens like `tl.set({}, {}, 283)` to "extend" it. (Some external docs show this trick; in HyperFrames it conflicts with the seek-driven duration model — set `data-duration` instead.)
|
|
33
|
+
|
|
34
|
+
## Core Tween Methods
|
|
35
|
+
|
|
36
|
+
- **gsap.to(targets, vars)** — animate from current state to `vars`. Most common.
|
|
37
|
+
- **gsap.from(targets, vars)** — animate from `vars` to current state (entrances).
|
|
38
|
+
- **gsap.fromTo(targets, fromVars, toVars)** — explicit start and end.
|
|
39
|
+
- **gsap.set(targets, vars)** — apply immediately (duration 0).
|
|
40
|
+
|
|
41
|
+
Always use **camelCase** property names (e.g. `backgroundColor`, `rotationX`).
|
|
42
|
+
|
|
43
|
+
## Common vars (cheatsheet)
|
|
44
|
+
|
|
45
|
+
- **duration** — seconds (default 0.5).
|
|
46
|
+
- **delay** — seconds before start.
|
|
47
|
+
- **ease** — `"power1.out"` (default), `"power3.inOut"`, `"back.out(1.7)"`, `"elastic.out(1, 0.3)"`, `"none"`. See `./gsap-easing-and-stagger.md`.
|
|
48
|
+
- **stagger** — number or object. See `./gsap-easing-and-stagger.md`.
|
|
49
|
+
- **repeat** — finite number; never `-1` in HyperFrames. Compute repeats from the visible duration.
|
|
50
|
+
- **yoyo** — alternates direction with repeat.
|
|
51
|
+
- **overwrite** — `false` (default), `true`, or `"auto"`.
|
|
52
|
+
- **immediateRender** — default `true` for from()/fromTo(). Set `false` on later tweens targeting the same property+element.
|
|
53
|
+
- **onComplete**, **onStart**, **onUpdate** — callbacks.
|
|
54
|
+
|
|
55
|
+
For transforms, autoAlpha, clearProps, and SVG specifics see `./gsap-transforms-and-perf.md`.
|
|
56
|
+
|
|
57
|
+
## Animated properties
|
|
58
|
+
|
|
59
|
+
Prefer these efficient targets when they preserve the recipe's behaviour:
|
|
60
|
+
|
|
61
|
+
- **Compositor-cheap**: `opacity`, `x`, `y`, `scale`, `scaleX`, `scaleY`, `rotation`, `rotationX`, `rotationY`, `skewX`, `skewY`, `transformOrigin`
|
|
62
|
+
- **Visual fills**: `color`, `backgroundColor`, `borderColor`, `borderRadius`
|
|
63
|
+
- **CSS variables**: `"--hue": 180` etc.
|
|
64
|
+
- **Media `volume`** (on `<audio>` / `<video>`): do not tween it for fades or ducking; use the `data-automation` volume lane (see `data-attributes.md`). A lane wins over a tween on the same element.
|
|
65
|
+
- **DOM text `innerText`** (for numeric counters): tween it directly, e.g. `tl.to(el, { innerText: 100, snap: { innerText: 1 } })` — `snap` keeps it integer; the GSAP inspector recognizes it as a counter. Use a deterministic proxy value with `onUpdate` for locale formatting or suffix logic when the selected recipe needs it.
|
|
66
|
+
|
|
67
|
+
**Avoid** (use the transform alias instead):
|
|
68
|
+
|
|
69
|
+
- `width` / `height` / `top` / `left` / `right` / `bottom` / `margin*` / `padding*` — trigger layout reflows. Use `scaleX/Y` (with `transformOrigin`) or `x` / `y`.
|
|
70
|
+
|
|
71
|
+
**Forbidden** (breaks the renderer or the clip lifecycle):
|
|
72
|
+
|
|
73
|
+
- `display`, raw `visibility` **on a clip element**: never duration-tween these. HyperFrames owns a clip's visibility and `lint` rejects it. Use `autoAlpha` (opacity plus endpoint visibility) or a zero-duration timeline set at an explicit boundary. Animating a clip element's other visual properties is fine and the shipped catalog does it throughout; what is forbidden is taking over its visibility.
|
|
74
|
+
- Anything driven by `Math.random()`, `Date.now()`, `performance.now()`, or event handlers — animation state must be deterministic from time alone.
|
|
75
|
+
|
|
76
|
+
> **Note**: the list above is a **denylist**, not an allowlist. Properties outside it, including `width`, `height`, `filter`, `clipPath` and `strokeDashoffset`, are legitimate targets; prefer transforms and opacity where you have the choice, for performance rather than correctness. See `determinism-rules.md` for the full deterministic-render contract.
|
|
77
|
+
|
|
78
|
+
## References
|
|
79
|
+
|
|
80
|
+
- `./gsap-timeline-and-labels.md` — timeline creation, position parameter (`+=`, `<`, `>`), labels, nesting, sub-comp `fromTo` preference, playback control.
|
|
81
|
+
- `./gsap-easing-and-stagger.md` — easing families, stagger objects, function-based values, `gsap.matchMedia()`, `gsap.defaults()`.
|
|
82
|
+
- `./gsap-transforms-and-perf.md` — transform aliases, autoAlpha, `quickTo`, `will-change`, performance rules.
|
|
83
|
+
- The selected recipe defines effects and motion mechanisms; these API examples are not additional creative instructions.
|
|
84
|
+
|
|
85
|
+
## Best Practices
|
|
86
|
+
|
|
87
|
+
- Use camelCase property names; prefer transform aliases and autoAlpha.
|
|
88
|
+
- Prefer timelines over chained tweens with delays; use the position parameter.
|
|
89
|
+
- Add labels with `addLabel()` for readable sequencing.
|
|
90
|
+
- Pass defaults into the timeline constructor.
|
|
91
|
+
- Store the tween/timeline return value when controlling playback.
|
|
92
|
+
|
|
93
|
+
## Do Not
|
|
94
|
+
|
|
95
|
+
- Animate layout properties (`width`/`height`/`top`/`left`) when transforms suffice.
|
|
96
|
+
- Use both `svgOrigin` and `transformOrigin` on the same SVG element.
|
|
97
|
+
- Chain animations with `delay` when a timeline can sequence them.
|
|
98
|
+
- Create tweens before the DOM exists.
|
|
99
|
+
- Use infinite `repeat: -1` in HyperFrames compositions — use finite repeat counts computed from the visible duration.
|
|
100
|
+
|
|
101
|
+
## Credits And References
|
|
102
|
+
|
|
103
|
+
- HyperFrames adapter source: `packages/core/src/runtime/adapters/gsap.ts`.
|
|
104
|
+
- GSAP documentation: https://gsap.com/docs/v3/
|
|
105
|
+
- GSAP timeline pause and seek behavior: https://gsap.com/docs/v3/GSAP/Timeline/pause%28%29/
|