@prestyj/cli 5.27.0 → 5.28.1
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 +52 -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/flash-check.mjs +314 -0
- package/assets/motion/bin/fonts.mjs +111 -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 +256 -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/finger-paint/OFL.txt +93 -0
- package/assets/motion/fonts/finger-paint/finger-paint-normal.woff2 +0 -0
- package/assets/motion/fonts/fonts.json +265 -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/short-stack/OFL.txt +94 -0
- package/assets/motion/fonts/short-stack/short-stack-normal.woff2 +0 -0
- package/assets/motion/fonts/sora/OFL.txt +93 -0
- package/assets/motion/fonts/sora/sora-normal.woff2 +0 -0
- package/assets/motion/fonts/specimen.jpg +0 -0
- package/assets/motion/fonts/unbounded/OFL.txt +93 -0
- package/assets/motion/fonts/unbounded/unbounded-normal.woff2 +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 +106 -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/motion-language.md +128 -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 +62 -0
- package/assets/motion/references/runtime/lint-validate-inspect.md +131 -0
- package/assets/motion/references/runtime/minimal-composition.md +75 -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 +71 -0
- package/assets/motion/skills/motion/SKILL.md +178 -0
- package/assets/motion/skills/source-ingest/SKILL.md +45 -0
- package/assets/motion/skills/video-qa/SKILL.md +89 -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 +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +39 -3
- package/dist/core/agent-session.js +148 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.js +12 -3
- 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/autopilot-verdict.d.ts +5 -1
- package/dist/core/autopilot-verdict.js +30 -13
- package/dist/core/autopilot-verdict.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/ideal-review-subagent.d.ts +16 -2
- package/dist/core/ideal-review-subagent.js +19 -2
- package/dist/core/ideal-review-subagent.js.map +1 -1
- 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/nolan-context.d.ts +7 -5
- package/dist/core/nolan-context.js +106 -16
- package/dist/core/nolan-context.js.map +1 -1
- package/dist/core/nolan-prompt.js +24 -21
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/project-discovery.js +80 -26
- package/dist/core/project-discovery.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 +15 -0
- package/dist/core/skills.js +48 -4
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +3 -1
- package/dist/core/subagent-manager.js +3 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-policy.js +1 -1
- 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/core/worktree-setup.d.ts +23 -0
- package/dist/core/worktree-setup.js +128 -9
- package/dist/core/worktree-setup.js.map +1 -1
- package/dist/core/worktree.d.ts +20 -2
- package/dist/core/worktree.js +74 -31
- package/dist/core/worktree.js.map +1 -1
- package/dist/modes/json-mode.js +11 -2
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +36 -1
- package/dist/modes/subagent-worker-mode.js +68 -38
- package/dist/modes/subagent-worker-mode.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 +35 -0
- package/dist/motion-agent/motion-check-tool.js +514 -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 +44 -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 +5 -1
- package/dist/system-prompt.js +17 -4
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.js +66 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +1 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +30 -2
- package/dist/tools/read-tracker.js +92 -5
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +36 -5
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +19 -0
- package/dist/tools/subagent-shared.js +30 -0
- package/dist/tools/subagent-shared.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 +4 -3
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/components/Footer.js +2 -3
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/render.d.ts +2 -0
- package/dist/ui/render.js +3 -0
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/text.d.ts +12 -0
- package/dist/utils/text.js +11 -0
- package/dist/utils/text.js.map +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Motion language
|
|
2
|
+
|
|
3
|
+
Use this for every video you design. The user's brand kit, references or a
|
|
4
|
+
chosen library look override any default below. These are principles, not a
|
|
5
|
+
house look. Choose the concept, palette and type fresh for every video; never
|
|
6
|
+
copy an earlier video's.
|
|
7
|
+
|
|
8
|
+
## The bar
|
|
9
|
+
|
|
10
|
+
Make a showcase piece, as if the best motion designers will judge it frame by
|
|
11
|
+
frame. Ambition means deliberate craft, not length or effect count. Every
|
|
12
|
+
colour, word, cut and ease needs a reason. Cut generic defaults: plain fades,
|
|
13
|
+
slowly drifting gradients, text that slides up and sits there. Judge it as the
|
|
14
|
+
kind of video it is: an explainer by how clearly it teaches, a tribute by how
|
|
15
|
+
it honours its subject, a launch by how it makes people want the product.
|
|
16
|
+
|
|
17
|
+
## Plan first
|
|
18
|
+
|
|
19
|
+
Before writing code, decide these and record them in the `Concept` and
|
|
20
|
+
`Language` lines of `frame.md`. A few lines is enough; nobody approves them.
|
|
21
|
+
|
|
22
|
+
- **Concept**: the idea the video demonstrates, in one sentence. Show it; don't
|
|
23
|
+
just state it.
|
|
24
|
+
- **Motif**: one shape or element that recurs and links every scene.
|
|
25
|
+
- **Register**: the tone (calm, playful, urgent, tender, precise…) and what it
|
|
26
|
+
means for size, speed, easing and colour. Take it from the brief, the brand
|
|
27
|
+
and the viewing context.
|
|
28
|
+
- **Palette**: each colour's role.
|
|
29
|
+
- **Type**: each family's role.
|
|
30
|
+
- **Beat**: tempo, arc and frame rate.
|
|
31
|
+
|
|
32
|
+
## Principles
|
|
33
|
+
|
|
34
|
+
**Register.** Map the tone to motion before choosing anything else. Quiet,
|
|
35
|
+
steady motion carries information and reading; expressive motion is saved for
|
|
36
|
+
the moments that matter, because it only reads as special against calm. These
|
|
37
|
+
pairings are illustrative, not presets: calm is long, soft moves and few of
|
|
38
|
+
them; playful is springy overshoot, squash and stretch; luxurious is slow and
|
|
39
|
+
precise with generous space; urgent is fast moves and hard cuts; tender is
|
|
40
|
+
warm, slow and held; technical is precise and snapping.
|
|
41
|
+
|
|
42
|
+
**Continuity.** Each scene hands something to the next: a shape, a word, a
|
|
43
|
+
colour field or a camera move. Prefer match cuts and shape handoffs to
|
|
44
|
+
cross-fades. The `type-as-spatial-handoff` study in [README.md](README.md) shows
|
|
45
|
+
type becoming the next scene.
|
|
46
|
+
|
|
47
|
+
**Palette.** A few colours, each with a role, derived from the brand, subject or
|
|
48
|
+
references. How many, how saturated and how often the frame changes colour
|
|
49
|
+
follow the register: full-frame colour blocks that change on most cuts suit a
|
|
50
|
+
loud, kinetic piece; a calm, tender or documentary piece holds a steadier field
|
|
51
|
+
and lets one accent carry attention. Gradients and glows are seasoning, not the
|
|
52
|
+
base. Keep text readable.
|
|
53
|
+
|
|
54
|
+
**No harmful flashing.** Anything flashing over more than about 3% of the frame
|
|
55
|
+
counts. Keep light/dark swaps, and swaps to and from saturated red, to at most
|
|
56
|
+
six in any one second (three flashes): faster flashing can trigger seizures,
|
|
57
|
+
and `motion_check` fails it. A swap on every beat at 120 BPM is fine; a white
|
|
58
|
+
flash frame on every half-beat is not.
|
|
59
|
+
|
|
60
|
+
**Type.** Choose faces for the register and the reading job. Size follows the
|
|
61
|
+
viewing context and how much there is to read: a kinetic poster can set one to
|
|
62
|
+
three huge words per shot; an explainer, documentary or lyric video sets whole
|
|
63
|
+
lines at a comfortable reading size. Size type against the frame's shorter side
|
|
64
|
+
(in vertical video, the width inside the safe margins) and check that the
|
|
65
|
+
longest word fits. Animate weight and width axes as motion, not only position
|
|
66
|
+
and opacity. Use one display family, at most one contrasting voice, such as an
|
|
67
|
+
italic serif, and small uppercase tracked mono for labels and UI where the
|
|
68
|
+
subject calls for it. Bundled axes (see `fonts.mjs list` and its specimen):
|
|
69
|
+
weight and width in Mona Sans, Hubot Sans, Anybody, Archivo, Bricolage
|
|
70
|
+
Grotesque and Martian Mono; italics in Fraunces and Newsreader. Brand fonts win.
|
|
71
|
+
|
|
72
|
+
**Motion.** Smooth by default, bounce by choice. Entrances settle on the
|
|
73
|
+
critically damped spring or `power3.out` / `expo.out`; exits `power3.in`; moves
|
|
74
|
+
`power3.inOut` or `expo.inOut`. Overshoot (`back.out`, `elastic.out` or an
|
|
75
|
+
underdamped spring) is a register chosen for playful or physical work, never
|
|
76
|
+
the default; see [easing](runtime/gsap-easing-and-stagger.md). Durations follow
|
|
77
|
+
the register: roughly 0.15–0.5 s for snappy, energetic or technical motion, and
|
|
78
|
+
0.6–1.5 s or longer for calm, luxurious or tender work. Staggers run 0.012–0.06 s
|
|
79
|
+
for type and longer for larger elements. Use real animation principles where
|
|
80
|
+
they help: anticipation before big moves, squash and stretch on impact, arcs
|
|
81
|
+
instead of straight paths, overlapping action, follow-through and smears on fast
|
|
82
|
+
moves. Lead with one movement at a time, with smaller overlapping motion under
|
|
83
|
+
it. Every move starts, travels and lands on purpose; nothing drifts without a
|
|
84
|
+
reason.
|
|
85
|
+
|
|
86
|
+
**Pace.** Keep time on a grid: the track's beats (`hf beats`) when there is
|
|
87
|
+
music, otherwise a tempo chosen for the register. Cut by how much there is to
|
|
88
|
+
take in, not by the grid alone: a simple image can last one beat; a line to
|
|
89
|
+
read or an idea to grasp holds for several. Meaningful text stays still and
|
|
90
|
+
readable for at least the longer of 0.8 s and one second per 15 characters,
|
|
91
|
+
longer for the key line; repeated or decorative words can go faster. Vary the
|
|
92
|
+
density (build, release, rest) so the video is neither always fast nor always
|
|
93
|
+
slow. Shape the whole to its form, with a beginning, development, peak and
|
|
94
|
+
resolution even in five seconds. Illustratively: a launch builds to its
|
|
95
|
+
product, an explainer steps through its idea, a lyric video follows the song's
|
|
96
|
+
sections, a tribute lets each moment breathe. End on a composed frame held long
|
|
97
|
+
enough to read, and declare that hold in the hold plan before checking.
|
|
98
|
+
|
|
99
|
+
**3D, when the subject earns it.** One hero object whose material, light and
|
|
100
|
+
camera come from the concept and register, not a stock tech look; add
|
|
101
|
+
supporting elements only when they mean something. Resolve 3D back to flat 2D to
|
|
102
|
+
hand off to the next scene. Use the bundled Three.js (`three.mjs`); no 3D by
|
|
103
|
+
default.
|
|
104
|
+
|
|
105
|
+
**Chrome, when it suits.** A small persistent mono layer (labels, timecode,
|
|
106
|
+
chapter name, a progress bar with markers) makes a tech subject feel like a pro
|
|
107
|
+
tool. Leave it out elsewhere.
|
|
108
|
+
|
|
109
|
+
**Frame rate.** 30 fps suits most work. Use 60 fps when fast, dense motion or
|
|
110
|
+
scrolling UI must read smoothly; it doubles render time. Renders carry no
|
|
111
|
+
motion blur, so fast moves stutter at 24 fps: keep 24 fps for slow, filmic or
|
|
112
|
+
handmade work.
|
|
113
|
+
|
|
114
|
+
**Truth.** Show only real product UI, numbers and claims from the user's
|
|
115
|
+
sources.
|
|
116
|
+
|
|
117
|
+
## Building blocks
|
|
118
|
+
|
|
119
|
+
Library looks (`library.mjs list looks`) are complete palette, type and rhythm
|
|
120
|
+
systems; when one fits the concept, it replaces the palette and type choices
|
|
121
|
+
above. Library pieces are optional building blocks.
|
|
122
|
+
|
|
123
|
+
## Check against the plan
|
|
124
|
+
|
|
125
|
+
When `motion_check` returns frames, compare them with the plan in `frame.md` as
|
|
126
|
+
well as the technical results. A lost motif, an off-palette colour, a generic
|
|
127
|
+
transition or unreadable type is a concrete defect: fix it and check the new
|
|
128
|
+
render.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Data Attributes Reference
|
|
2
|
+
|
|
3
|
+
Every HyperFrames composition uses `data-*` attributes to declare timing and structure to the framework. This is the full attribute table — pair with `tracks-and-clips.md` for the rules behind `data-track-index`.
|
|
4
|
+
|
|
5
|
+
## Composition Root
|
|
6
|
+
|
|
7
|
+
Every renderable composition needs one root element:
|
|
8
|
+
|
|
9
|
+
| Attribute | Required | Meaning |
|
|
10
|
+
| ---------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `data-composition-id` | Yes | Unique ID. Must match the animation registry key on `window.__timelines`. |
|
|
12
|
+
| `data-width` / `data-height` | Yes | Pixel frame size. Common values: `1920x1080`, `1080x1920`, `1080x1080`. |
|
|
13
|
+
| `data-duration` | Conditional\* | Render duration in seconds (total length / frame count), not the GSAP timeline length. **Read once at compile time, like `data-width` / `data-height`**: a static root `data-duration` is locked before scripts run, so a script (`root.setAttribute("data-duration", ...)`) or a `--variables`-driven value cannot change the render length. To vary length per render, author the root `data-duration` directly. (A clip's `data-duration` is different: re-read from the live DOM, so scripts/variables can drive it.) Only when the root omits `data-duration` does the renderer derive total length from the live DOM / timeline after scripts run. |
|
|
14
|
+
| `data-fps` | No | Optional frame rate hint. CLI render flags can override output fps. |
|
|
15
|
+
| `data-composition-variables` | No | JSON array of variable declarations (on `<html>`). See `variables-and-media.md`. |
|
|
16
|
+
|
|
17
|
+
\*`data-duration` is optional whenever the runtime can auto-infer duration: a registered GSAP timeline, a finite CSS animation, a finite WAAPI `element.animate()`, a registered Lottie animation, or timed clips (the root then ends at its latest clip end, and lint only warns `root_composition_duration_derived`). It is **required** for Three.js (no auto-inference), for infinite/unbounded CSS or WAAPI animations, and for any composition with no GSAP timeline, no animation signal and no timed clip with a length. `hf lint` enforces this (`root_composition_missing_duration_source`). See the adjacent `gsap.md` for the supported GSAP registry contract; preserve an explicit recipe duration rather than relying on inference when the source fixes it.
|
|
18
|
+
|
|
19
|
+
The root should be `position: relative`, have explicit pixel dimensions, and hide overflow unless intentionally composing outside the frame.
|
|
20
|
+
|
|
21
|
+
## Clip Attributes
|
|
22
|
+
|
|
23
|
+
**`data-start` is what makes an element a clip.** The runtime collects `[data-start]` and drives visibility off that attribute, so any element carrying it is timed.
|
|
24
|
+
|
|
25
|
+
`class="clip"` is a **convention, not a requirement**: the runtime never reads it. Keep writing it: drop it and the full-frame box collapses unless you supply that layout yourself, Studio uses it as an edit hint, and `lint` warns (`timed_element_missing_clip_class`) when a timed element lacks it. Omit it on `<video>` and `<audio>`.
|
|
26
|
+
|
|
27
|
+
**Nesting is allowed.** A timed element inside a wrapper is still timed, and a timed ancestor clamps its descendants: a child cannot be visible while its timed ancestor is hidden. Direct children of the root get automatic layout (see "Root-level clips get automatic layout" below); nested ones do not, so give them their own positioning.
|
|
28
|
+
|
|
29
|
+
| Attribute | Required | Meaning |
|
|
30
|
+
| ------------------ | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `id` | Yes on `<video>`/`<audio>`, else recommended | `lint` errors with `media_missing_id` on media without one, and an id-less `<audio>` is never mixed, so the render is **silent**. Elsewhere it is a warning (`studio_missing_editable_id`): Studio needs a stable edit target, and timeline targets reference it. |
|
|
32
|
+
| `data-start` | Yes | Start time in seconds, or a supported clip-time reference. This attribute is what marks the element as timed. |
|
|
33
|
+
| `data-duration` | Required for `div` and sub-compositions | Duration in seconds. An `img` with `data-start` defaults to 3 s; video/audio default to the source length (less the playback offset, over the rate) once known; an authored value trims. Without any resolvable duration the element has no end and stays visible for the rest of the composition. |
|
|
34
|
+
| `data-track-index` | No | Studio timeline lane, display only. The render never reads it, and clips on one track may overlap in time. Absent, the parser defaults it and Studio lays out one lane per clip. Two `<audio>` elements on the same index that overlap in time raise a `lint` warning. |
|
|
35
|
+
| `data-media-start` | No | Offset into the media source, in seconds. |
|
|
36
|
+
| `data-volume` | No | Static audio gain, default `1` (0 dB). `0` is silence and values above `1` boost, up to `3.98` (+12 dB) — Studio's fader writes this. For fades and ducking, use the `data-automation` volume lane (see `creator-editing-recipes.md`). |
|
|
37
|
+
| `data-has-audio` | No (`<video>` only) | `"true"` to declare the video carries an audio track when auto-detection would miss it. |
|
|
38
|
+
|
|
39
|
+
**The visibility window is half-open: `[start, start + duration)`.** A clip shows while `start ≤ t < start + duration` and is hidden at exactly `t = start + duration`. Land an animation's resolved end state slightly **before** `data-duration`, not on it, or its last frame is never rendered. Two clips can therefore be authored back to back (`b.start === a.start + a.duration`) with no overlapping frame.
|
|
40
|
+
|
|
41
|
+
**Root-level clips get automatic layout.** For direct children of the composition root that carry `data-start`, the runtime forces `position: absolute` and anchors them at `top: 0; left: 0`, sizing them to 100% when they have no computed size, so scenes stack in the same viewport layer. Elements **without** `data-start` are skipped entirely: an untimed full-bleed background needs its own `position: absolute; inset: 0`, or it collapses to zero height.
|
|
42
|
+
|
|
43
|
+
## Sub-Composition Host Attributes
|
|
44
|
+
|
|
45
|
+
When a clip is a sub-composition host (loads another composition file):
|
|
46
|
+
|
|
47
|
+
| Attribute | Required | Meaning |
|
|
48
|
+
| ---------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| `data-composition-id` | Recommended | The composition ID of the loaded file. Matching it is the convention; a host that names a different id, or none at all, is supported but resolves silently. |
|
|
50
|
+
| `data-composition-src` | Yes | Path to the sub-composition HTML file. |
|
|
51
|
+
| `data-width` / `data-height` | No | Render dimensions for the instance. The compiler backfills them from the loaded file's root when absent. |
|
|
52
|
+
| `data-variable-values` | No | Per-instance variable overrides as JSON. See `variables-and-media.md`. |
|
|
53
|
+
| `data-var-src` | No | Binds the element's `src` to a declared variable id (media/image substitution, authored src = fallback). |
|
|
54
|
+
| `data-var-text` | No | Binds the element's own text to a scalar variable id; children are preserved. |
|
|
55
|
+
|
|
56
|
+
See `sub-compositions.md` for the full wiring pattern.
|
|
57
|
+
|
|
58
|
+
## Authoring Hints
|
|
59
|
+
|
|
60
|
+
- `id="root"` — template convention used by scaffolds and the transition catalog so CSS can target the composition root with `#root` instead of `[data-composition-id="main"]`. Not required by the runtime, but consistent with the rest of the ecosystem.
|
|
61
|
+
- `class="clip"`: layout and tooling convention on visible timed elements (`<div>`, `<img>`, …), not a runtime requirement. See Clip Attributes above.
|
|
62
|
+
- `data-root="true"`: names the composition root explicitly. Without it the runtime picks the outermost `[data-composition-id]` element, which is right for almost every file; set it when compositions nest and you need to be unambiguous.
|
|
63
|
+
- `data-layout-allow-overflow` — tells `hyperframes check` that overflow on this element (or its descendants) is intentional. Notes:
|
|
64
|
+
- The `check` layout audit measures `getBoundingClientRect` at sampled timestamps, not rendered pixels. `overflow: hidden` clips the visual but does **not** suppress a layout finding. This attribute is the escape hatch; CSS overflow is not.
|
|
65
|
+
- Can be set on the composition **root** as well as on any child. When the cited offender is `div.<comp>-root inside div.<comp>-root` (the root reports its own children's union as overflowing), the fix goes on the root, not on individual text descendants — shrinking font sizes will not converge.
|
|
66
|
+
- In a multi-scene `group_wN.html` (continue runs), every scene-local element stays in the DOM during the other scenes' time windows; the layout-box union almost always overflows the canvas during morph seams. Mark the root and every scene-local primary/supporting element with this attribute **at construction**, not after `check` flags it.
|
|
67
|
+
- **Blast radius — it silences more than the overflow audit.** The attribute is inherited down the subtree (the perception probe walks ancestors), so it also suppresses the rendered-perception checks `text-clipping`, `content-cramped-container`, and `foreground-over-panel` for every descendant. Putting it on a persistent panel that also hosts real foreground content disables collision checks on that content for the panel's whole lifetime. Prefer the narrowest opt-out: scope it to the smallest decorative wrapper, or use per-element `data-layout-bleed="true"` for one intentional primary-text crop. The two canvas/edge checks `primary-offscreen` and `foreground-over-panel` deliberately run **even under** allow-overflow, so it cannot hide a wordmark sliced by the frame or text bleeding onto a panel edge.
|
|
68
|
+
- `data-layout-ignore` — exclude this element from layout audits entirely.
|
|
69
|
+
- `data-layout-allow-caption-zone` — opt out of `--caption-zone` / `caption_zone_collision` for intentional lower-third copy (applies to the element and every descendant via `closest`; does **not** suppress overflow, overlap, occlusion, or other layout audits — pair those attrs if needed).
|
|
70
|
+
|
|
71
|
+
## Legacy / Removed Attributes
|
|
72
|
+
|
|
73
|
+
These names appear in older projects and examples. Use the current names when authoring or editing:
|
|
74
|
+
|
|
75
|
+
| Legacy name | Use instead |
|
|
76
|
+
| ------------ | ------------------ |
|
|
77
|
+
| `data-layer` | `data-track-index` |
|
|
78
|
+
| `data-end` | `data-duration` |
|
|
@@ -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 choose the design; the video's plan in `frame.md` does.
|
|
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
|
+
- Absolute layers are appropriate for deliberately placed design elements; keep one positioning model per scene.
|
|
45
|
+
- Prefer transforms and opacity for animation.
|
|
46
|
+
- Keep text inside its intended container. Wrap, resize or use `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })` deliberately; never let text clip silently.
|
|
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. A chosen register (playful, physical), never a default. |
|
|
15
|
+
| `elastic.out(1, 0.3)` | Springy bounce. Same register 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 by default, bounce by choice** — the same rule as the Motion section of [`motion-language.md`](../motion-language.md): entrances default to `power3.out` or the baked critically-damped spring (see Spring Eases below); overshoot eases (`back` / `elastic` / `bounce`, or an underdamped spring) are a register the brief chooses for playful or physical work, 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) | Chosen register only (playful, physical), 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 | Same register rule; the baked spring (below) is the physical version |
|
|
34
|
+
| `bounce` | Ball-drop bouncing | 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 when the brief's register is playful or physical. The register recorded in `frame.md` 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 a 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 = playful register — ~5–10% overshoot (by choice; 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% | Playful register, by choice (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 — when the shot opens on it, start it early so the subject is seen within about half a second |
|
|
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
|
+
- **Default unchanged**: ζ below ~0.8 is a register the brief chooses, never a default. 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.
|