@nerdev/skillset 0.2.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/LICENSE +21 -0
- package/README.md +351 -0
- package/bin/skillset.mjs +205 -0
- package/curations/README.md +53 -0
- package/curations/TEMPLATE/WHY.md +23 -0
- package/curations/TEMPLATE/overlay/SKILL.md +6 -0
- package/curations/impeccable/WHY.md +34 -0
- package/curations/impeccable/overlay/SKILL.md +116 -0
- package/package.json +43 -0
- package/scripts/ste-gate.mjs +39 -0
- package/scripts/ste-lint.py +201 -0
- package/scripts/sync.mjs +174 -0
- package/skills/ai-agent/agent-docs-writer/SKILL.md +105 -0
- package/skills/ai-agent/agent-docs-writer/references/principles.md +73 -0
- package/skills/ai-agent/agent-docs-writer/templates/AGENTS.template.md +44 -0
- package/skills/ai-agent/agent-docs-writer/templates/README.template.md +19 -0
- package/skills/ai-agent/ultra-context-engine/SKILL.md +941 -0
- package/skills/architecture/blueprint/SKILL.md +191 -0
- package/skills/architecture/code-tour/SKILL.md +204 -0
- package/skills/architecture/progress-guard/SKILL.md +148 -0
- package/skills/architecture/search-first/SKILL.md +97 -0
- package/skills/backend/api-design/SKILL.md +456 -0
- package/skills/backend/auth/SKILL.md +596 -0
- package/skills/backend/database/SKILL.md +431 -0
- package/skills/backend/realtime/SKILL.md +670 -0
- package/skills/backend/security/SKILL.md +590 -0
- package/skills/business/brag/SKILL.md +177 -0
- package/skills/business/brag/assets/music/README.md +20 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.md +75 -0
- package/skills/business/brag/assets/sfx/ui/click1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/business/brag/references/audio.md +307 -0
- package/skills/business/brag/references/step-1-inspect.md +133 -0
- package/skills/business/brag/references/step-2-plan.md +234 -0
- package/skills/business/brag/references/step-3-compose.md +210 -0
- package/skills/business/brag/references/step-4-deliver.md +168 -0
- package/skills/business/brag/references/tones.md +231 -0
- package/skills/business/brag/scripts/analyze_music_cues.py +309 -0
- package/skills/business/brag/scripts/pyproject.toml +14 -0
- package/skills/business/brag/scripts/uv.lock +819 -0
- package/skills/business/copywriting/SKILL.md +178 -0
- package/skills/business/customer-research/SKILL.md +259 -0
- package/skills/business/freelancing/SKILL.md +679 -0
- package/skills/business/launch/SKILL.md +273 -0
- package/skills/business/marketing-psychology/SKILL.md +364 -0
- package/skills/business/pricing/SKILL.md +233 -0
- package/skills/business/resume-revamp-jake-ats/SKILL.md +64 -0
- package/skills/business/startup-founder/SKILL.md +400 -0
- package/skills/business/startup-founder/references/funding.md +48 -0
- package/skills/business/startup-founder/references/further-reading.md +132 -0
- package/skills/business/startup-founder/references/gtm-tools.md +57 -0
- package/skills/business/startup-founder/references/legal-india.md +36 -0
- package/skills/business/startup-founder/references/marketing/README.md +16 -0
- package/skills/business/startup-founder/references/marketing/cold-email.md +172 -0
- package/skills/business/startup-founder/references/marketing/competitors.md +245 -0
- package/skills/business/startup-founder/references/marketing/customer-research.md +276 -0
- package/skills/business/startup-founder/references/marketing/free-tools.md +168 -0
- package/skills/business/startup-founder/references/marketing/launch.md +343 -0
- package/skills/business/startup-founder/references/marketing/marketing-plan.md +270 -0
- package/skills/business/startup-founder/references/marketing/pricing.md +237 -0
- package/skills/business/startup-founder/references/marketing/product-marketing.md +250 -0
- package/skills/business/startup-founder/references/validation.md +267 -0
- package/skills/devops/deployments/SKILL.md +339 -0
- package/skills/devops/git-ci/SKILL.md +372 -0
- package/skills/devops/performance/SKILL.md +523 -0
- package/skills/devops/testing/SKILL.md +558 -0
- package/skills/engineering/code-review/SKILL.md +149 -0
- package/skills/engineering/coding-standards/SKILL.md +229 -0
- package/skills/engineering/product-engineering/SKILL.md +219 -0
- package/skills/engineering/senior-engineer-prompts/SKILL.md +145 -0
- package/skills/engineering/tdd-workflow/SKILL.md +178 -0
- package/skills/engineering/verification-loop/SKILL.md +199 -0
- package/skills/nerdev/nerdev-abstraction/SKILL.md +412 -0
- package/skills/nerdev/nerdev-docs/SKILL.md +527 -0
- package/skills/nerdev/nerdev-docs/templates/adr-template.md +39 -0
- package/skills/nerdev/nerdev-docs/templates/contributing-template.md +140 -0
- package/skills/nerdev/nerdev-docs/templates/deploy-template.md +426 -0
- package/skills/nerdev/nerdev-docs/templates/design-template.md +105 -0
- package/skills/nerdev/nerdev-docs/templates/incident-template.md +66 -0
- package/skills/nerdev/nerdev-monorepo/SKILL.md +522 -0
- package/skills/quality/output-skill/SKILL.md +49 -0
- package/skills/quality/unslop/SKILL.md +67 -0
- package/skills/ui/animaxxing/SKILL.md +58 -0
- package/skills/ui/animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/animaxxing/references/effect-restoration.md +26 -0
- package/skills/ui/animaxxing/references/motion-vocabulary.md +142 -0
- package/skills/ui/animaxxing/references/recipes/blast-off.md +119 -0
- package/skills/ui/animaxxing/references/recipes/particle-effects.md +718 -0
- package/skills/ui/animaxxing/references/recipes/particle-field.md +428 -0
- package/skills/ui/animaxxing/references/recipes/route-letters.md +205 -0
- package/skills/ui/animaxxing/references/recipes/speak-in.md +181 -0
- package/skills/ui/animaxxing/references/recipes/split-entrances.md +345 -0
- package/skills/ui/animaxxing/references/recipes/wave.md +144 -0
- package/skills/ui/animaxxing/references/text-stability.md +68 -0
- package/skills/ui/animaxxing/references/verification.md +44 -0
- package/skills/ui/ask-animation/SKILL.md +178 -0
- package/skills/ui/ask-base-ui/SKILL.md +400 -0
- package/skills/ui/ask-cmdk/SKILL.md +315 -0
- package/skills/ui/ask-command-menu/SKILL.md +262 -0
- package/skills/ui/ask-drawer/SKILL.md +235 -0
- package/skills/ui/ask-form/SKILL.md +229 -0
- package/skills/ui/ask-gsap/SKILL.md +435 -0
- package/skills/ui/ask-modal/SKILL.md +145 -0
- package/skills/ui/ask-motion/SKILL.md +339 -0
- package/skills/ui/ask-rhf/SKILL.md +388 -0
- package/skills/ui/ask-sonner/API.md +64 -0
- package/skills/ui/ask-sonner/SKILL.md +88 -0
- package/skills/ui/ask-table/SKILL.md +253 -0
- package/skills/ui/ask-tanstack-table/SKILL.md +490 -0
- package/skills/ui/ask-toast/SKILL.md +163 -0
- package/skills/ui/ask-vaul/SKILL.md +291 -0
- package/skills/ui/ask-virtual-list/SKILL.md +304 -0
- package/skills/ui/ask-virtuoso/SKILL.md +332 -0
- package/skills/ui/email-craft/SKILL.md +258 -0
- package/skills/ui/frontend-craftsmanship/SKILL.md +462 -0
- package/skills/ui/gsap-astro/SKILL.md +56 -0
- package/skills/ui/gsap-astro/agents/openai.yaml +7 -0
- package/skills/ui/gsap-astro/references/client-router-navigation.md +139 -0
- package/skills/ui/gsap-astro/references/initialization.md +87 -0
- package/skills/ui/gsap-astro/references/motion-system.md +152 -0
- package/skills/ui/gsap-astro/references/scripts-and-islands.md +65 -0
- package/skills/ui/gsap-astro/references/verification.md +44 -0
- package/skills/ui/gsap-core/SKILL.md +254 -0
- package/skills/ui/gsap-frameworks/SKILL.md +266 -0
- package/skills/ui/gsap-nextjs/SKILL.md +51 -0
- package/skills/ui/gsap-nextjs/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nextjs/references/app-router-navigation.md +189 -0
- package/skills/ui/gsap-nextjs/references/initialization.md +87 -0
- package/skills/ui/gsap-nextjs/references/motion-system.md +158 -0
- package/skills/ui/gsap-nextjs/references/verification.md +40 -0
- package/skills/ui/gsap-nuxt/SKILL.md +56 -0
- package/skills/ui/gsap-nuxt/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nuxt/references/initialization.md +87 -0
- package/skills/ui/gsap-nuxt/references/motion-system.md +161 -0
- package/skills/ui/gsap-nuxt/references/navigation.md +145 -0
- package/skills/ui/gsap-nuxt/references/page-transitions.md +107 -0
- package/skills/ui/gsap-nuxt/references/verification.md +42 -0
- package/skills/ui/gsap-performance/SKILL.md +79 -0
- package/skills/ui/gsap-plugins/SKILL.md +433 -0
- package/skills/ui/gsap-react/SKILL.md +136 -0
- package/skills/ui/gsap-react-router/SKILL.md +55 -0
- package/skills/ui/gsap-react-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-react-router/references/initialization.md +87 -0
- package/skills/ui/gsap-react-router/references/motion-system.md +158 -0
- package/skills/ui/gsap-react-router/references/react-router-navigation.md +165 -0
- package/skills/ui/gsap-react-router/references/route-lifetime.md +74 -0
- package/skills/ui/gsap-react-router/references/verification.md +42 -0
- package/skills/ui/gsap-scrolltrigger/SKILL.md +296 -0
- package/skills/ui/gsap-sveltekit/SKILL.md +54 -0
- package/skills/ui/gsap-sveltekit/agents/openai.yaml +7 -0
- package/skills/ui/gsap-sveltekit/references/initialization.md +87 -0
- package/skills/ui/gsap-sveltekit/references/motion-system.md +156 -0
- package/skills/ui/gsap-sveltekit/references/page-lifetime.md +63 -0
- package/skills/ui/gsap-sveltekit/references/sveltekit-navigation.md +160 -0
- package/skills/ui/gsap-sveltekit/references/verification.md +41 -0
- package/skills/ui/gsap-tanstack-router/SKILL.md +56 -0
- package/skills/ui/gsap-tanstack-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-tanstack-router/references/initialization.md +87 -0
- package/skills/ui/gsap-tanstack-router/references/motion-system.md +160 -0
- package/skills/ui/gsap-tanstack-router/references/route-lifetime.md +66 -0
- package/skills/ui/gsap-tanstack-router/references/tanstack-navigation.md +156 -0
- package/skills/ui/gsap-tanstack-router/references/verification.md +41 -0
- package/skills/ui/gsap-timeline/SKILL.md +107 -0
- package/skills/ui/gsap-utils/SKILL.md +284 -0
- package/skills/ui/gsap-vanilla/SKILL.md +63 -0
- package/skills/ui/gsap-vanilla/agents/openai.yaml +7 -0
- package/skills/ui/gsap-vanilla/references/cross-document-navigation.md +54 -0
- package/skills/ui/gsap-vanilla/references/initialization.md +87 -0
- package/skills/ui/gsap-vanilla/references/motion-system.md +150 -0
- package/skills/ui/gsap-vanilla/references/page-load.md +96 -0
- package/skills/ui/gsap-vanilla/references/spa-navigation.md +70 -0
- package/skills/ui/gsap-vanilla/references/verification.md +41 -0
- package/skills/ui/house-style/SKILL.md +366 -0
- package/skills/ui/imagegen/SKILL.md +49 -0
- package/skills/ui/imagegen/references/brandkit.md +48 -0
- package/skills/ui/imagegen/references/image-to-code.md +56 -0
- package/skills/ui/imagegen/references/mobile.md +58 -0
- package/skills/ui/imagegen/references/web.md +63 -0
- package/skills/ui/impeccable/SKILL.md +116 -0
- package/skills/ui/impeccable/reference/adapt.md +318 -0
- package/skills/ui/impeccable/reference/adapt.native.md +58 -0
- package/skills/ui/impeccable/reference/android.md +46 -0
- package/skills/ui/impeccable/reference/animate.md +89 -0
- package/skills/ui/impeccable/reference/audit.md +137 -0
- package/skills/ui/impeccable/reference/audit.native.md +139 -0
- package/skills/ui/impeccable/reference/bolder.md +33 -0
- package/skills/ui/impeccable/reference/clarify.md +94 -0
- package/skills/ui/impeccable/reference/colorize.md +86 -0
- package/skills/ui/impeccable/reference/craft-floor.md +44 -0
- package/skills/ui/impeccable/reference/craft.md +5 -0
- package/skills/ui/impeccable/reference/critique.md +806 -0
- package/skills/ui/impeccable/reference/degraded/asset-producer.md +37 -0
- package/skills/ui/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/ui/impeccable/reference/degraded/finish-reviewer.md +38 -0
- package/skills/ui/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/ui/impeccable/reference/delight.md +70 -0
- package/skills/ui/impeccable/reference/distill.md +111 -0
- package/skills/ui/impeccable/reference/doctor.md +54 -0
- package/skills/ui/impeccable/reference/document.md +416 -0
- package/skills/ui/impeccable/reference/extract.md +69 -0
- package/skills/ui/impeccable/reference/generate.md +101 -0
- package/skills/ui/impeccable/reference/harden.md +345 -0
- package/skills/ui/impeccable/reference/hooks.md +111 -0
- package/skills/ui/impeccable/reference/init.md +131 -0
- package/skills/ui/impeccable/reference/ios.md +51 -0
- package/skills/ui/impeccable/reference/layout.md +84 -0
- package/skills/ui/impeccable/reference/live-setup.md +104 -0
- package/skills/ui/impeccable/reference/live.md +325 -0
- package/skills/ui/impeccable/reference/new-work.md +145 -0
- package/skills/ui/impeccable/reference/onboard.md +234 -0
- package/skills/ui/impeccable/reference/operate.md +61 -0
- package/skills/ui/impeccable/reference/optimize.md +258 -0
- package/skills/ui/impeccable/reference/overdrive.md +127 -0
- package/skills/ui/impeccable/reference/polish.md +105 -0
- package/skills/ui/impeccable/reference/quieter.md +99 -0
- package/skills/ui/impeccable/reference/routing.md +24 -0
- package/skills/ui/impeccable/reference/shape.md +59 -0
- package/skills/ui/impeccable/reference/typeset.md +80 -0
- package/skills/ui/impeccable/reference/visualize.md +46 -0
- package/skills/ui/impeccable/scripts/VERSION +1 -0
- package/skills/ui/impeccable/scripts/command-metadata.json +98 -0
- package/skills/ui/impeccable/scripts/data/font-index-failures.json +121 -0
- package/skills/ui/impeccable/scripts/data/font-index.json +1 -0
- package/skills/ui/impeccable/scripts/impeccable +206 -0
- package/skills/ui/impeccable/scripts/impeccable.cmd +214 -0
- package/skills/ui/impeccable/scripts/live-browser-dom.js +167 -0
- package/skills/ui/impeccable/scripts/live-browser-ignores.js +242 -0
- package/skills/ui/impeccable/scripts/live-browser-session.js +144 -0
- package/skills/ui/impeccable/scripts/live-browser.js +13510 -0
- package/skills/ui/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/ui/motion/SKILL.md +207 -0
- package/skills/ui/pick-ui-library/SKILL.md +85 -0
- package/skills/ui/product-messaging/SKILL.md +163 -0
- package/skills/ui/product-site/SKILL.md +465 -0
- package/skills/ui/prototype/PICKER.md +197 -0
- package/skills/ui/prototype/SKILL.md +98 -0
- package/skills/ui/refero-design/SKILL.md +534 -0
- package/skills/ui/refero-design/agents/openai.yaml +4 -0
- package/skills/ui/refero-design/references/anti-ai-slop.md +292 -0
- package/skills/ui/refero-design/references/color.md +563 -0
- package/skills/ui/refero-design/references/copywriting.md +222 -0
- package/skills/ui/refero-design/references/craft-details.md +525 -0
- package/skills/ui/refero-design/references/example-workflow.md +264 -0
- package/skills/ui/refero-design/references/icons.md +166 -0
- package/skills/ui/refero-design/references/mcp-tools.md +258 -0
- package/skills/ui/refero-design/references/motion.md +504 -0
- package/skills/ui/refero-design/references/typography.md +737 -0
- package/skills/ui/refero-design/references/visual-workflow.md +105 -0
- package/skills/ui/style-animaxxing/SKILL.md +48 -0
- package/skills/ui/style-animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/style-animaxxing/references/motion-vocabulary.md +51 -0
- package/skills/ui/style-animaxxing/references/tokens.md +288 -0
- package/skills/ui/style-animaxxing/references/typography-and-layout.md +149 -0
- package/skills/ui/style-animaxxing/references/verification.md +38 -0
- package/skills/ui/typography-picker/SKILL.md +305 -0
- package/skills/ui/ui-core/SKILL.md +345 -0
- package/skills/ui/ui-core/references/accessibility.md +85 -0
- package/skills/ui/ui-core/references/build.md +666 -0
- package/skills/ui/ui-core/references/copy.md +70 -0
- package/skills/ui/ui-core/references/dark-mode.md +76 -0
- package/skills/ui/ui-core/references/direction.md +99 -0
- package/skills/ui/ui-core/references/redesign.md +74 -0
- package/skills/ui/ui-core/references/responsive.md +77 -0
- package/skills/ui/ui-core/references/styles.md +42 -0
- package/skills/ui/ui-core/references/system.md +190 -0
- package/skills/ui/ui-core/references/verify.md +37 -0
- package/skills/ui/ui-engineering/SKILL.md +436 -0
- package/skills/ui/ui-engineering/references/avatars.md +74 -0
- package/skills/ui/ui-engineering/references/card-patterns.md +66 -0
- package/skills/ui/ui-engineering/references/floating-actions.md +65 -0
- package/skills/ui/ui-engineering/references/navigation.md +81 -0
- package/skills/ui/ui-engineering/references/overlays.md +74 -0
- package/skills/ui/ui-engineering/references/pagination.md +71 -0
- package/skills/ui/ui-engineering/references/progress-indicators.md +77 -0
- package/skills/ui/ui-engineering/references/quality-bar.md +293 -0
- package/skills/ui/ui-engineering/references/search.md +68 -0
- package/skills/ui/ui-engineering/references/tailwind-architecture.md +81 -0
- package/skills/ui/ui-theme-picker/SKILL.md +522 -0
- package/skills/ui/ui-theme-picker/references/component-sources.md +223 -0
- package/skills/ui/ui-theme-picker/references/styles.md +298 -0
- package/skills/ui/vitepress-docs/SKILL.md +439 -0
- package/skills/ui/vitepress-docs/references/components.md +333 -0
- package/skills/ui/vitepress-docs/references/layout.md +128 -0
- package/skills/ui/vitepress-docs/references/tokens.md +87 -0
- package/skills/ui/vitepress-docs/references/typography.md +76 -0
- package/skills/workflow/careful/SKILL.md +48 -0
- package/skills/workflow/context-restore/SKILL.md +69 -0
- package/skills/workflow/context-save/SKILL.md +96 -0
- package/skills/workflow/health/SKILL.md +99 -0
- package/skills/workflow/learn/SKILL.md +95 -0
- package/skills/workflow/office-hours/SKILL.md +136 -0
- package/skills/workflow/ship/SKILL.md +95 -0
- package/vendor.json +80 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Lifecycle implementation
|
|
2
|
+
|
|
3
|
+
Read this to implement the five phases for pages and components without layout shift.
|
|
4
|
+
|
|
5
|
+
## The contract
|
|
6
|
+
|
|
7
|
+
**mount → initial state → intro → settled → outro → end state → unmount**
|
|
8
|
+
|
|
9
|
+
One controller owns a node from mount to unmount and exposes one current phase:
|
|
10
|
+
|
|
11
|
+
1. **Initial state.** In the DOM, final size reserved, measured, start values applied, not yet shown.
|
|
12
|
+
2. **Intro.** One timeline from initial values to settled.
|
|
13
|
+
3. **Settled.** Visible, stable, interactive, and controlled by normal CSS.
|
|
14
|
+
4. **Outro.** Still in the DOM while one timeline moves it toward removal.
|
|
15
|
+
5. **End state.** Still in the DOM, final values applied, completion run once. Safe to remove.
|
|
16
|
+
|
|
17
|
+
The user's request defines how each phase looks. If it only describes an intro or outro, implement the other phases as the minimum needed to enter and leave cleanly.
|
|
18
|
+
|
|
19
|
+
Store the current phase in a data attribute on the owned node. Do not infer it from opacity, DOM presence, or timeline progress.
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
Create one module that imports GSAP and only the plugins the project uses, registers them once, and exports them. Other modules import from it. With a script-tag install, do the same in one file that runs first.
|
|
24
|
+
|
|
25
|
+
Give every owner a `gsap.context` scoped to its root element:
|
|
26
|
+
|
|
27
|
+
- Selectors inside the context match only inside that root.
|
|
28
|
+
- `revert()` on the context kills every tween, trigger, and split it created and restores inline styles.
|
|
29
|
+
- Wrap callbacks and event handlers that create GSAP work in `context.add` so they belong to the context.
|
|
30
|
+
- Store listeners, observers, and timers next to the context and remove them in the same cleanup.
|
|
31
|
+
|
|
32
|
+
Write setup so it is correct when it runs more than once on the same node. A bfcache restore, a same-document router revisiting a page, and a presence controller re-showing content all hand you a node that already holds settled values. Write initial state explicitly with `set` or `fromTo` rather than a `from` tween that trusts a fresh node, and make cleanup leave the node readable.
|
|
33
|
+
|
|
34
|
+
## Initial state
|
|
35
|
+
|
|
36
|
+
Build the final layout with normal CSS first. The initial state changes appearance, not layout. The element that owns geometry must exist before the animated node does.
|
|
37
|
+
|
|
38
|
+
- Mount content before measuring or animating it.
|
|
39
|
+
- Give images and media dimensions or an aspect ratio.
|
|
40
|
+
- Reserve async regions with a wrapper when their size is known.
|
|
41
|
+
- Prefer transforms, `autoAlpha`, masks, or clipping, which keep the layout box.
|
|
42
|
+
|
|
43
|
+
If the effect changes width, height, or position:
|
|
44
|
+
|
|
45
|
+
- Animate a transform on an inner element while an outer wrapper holds the settled size.
|
|
46
|
+
- For a real expand or collapse, measure start and end sizes first, animate the wrapper, and decide how surrounding content moves.
|
|
47
|
+
- For layout-to-layout changes, use Flip: capture the old state, apply the new layout, animate.
|
|
48
|
+
- When old and new content share one region, reserve the parent and overlap the children so only the parent affects layout.
|
|
49
|
+
|
|
50
|
+
Content must stay readable without JavaScript. The pre-paint hiding rule in [Page load and unload](page-load.md#initial-state-before-first-paint) is the only sanctioned way to hide before the intro.
|
|
51
|
+
|
|
52
|
+
## Initialization and recovery
|
|
53
|
+
|
|
54
|
+
Apply the [initialization contract](initialization.md) whenever content starts hidden. It includes recovery ordering, indexing/performance limits, and failure checks.
|
|
55
|
+
|
|
56
|
+
- Put the early marker and independent timer in `head`. Register owner rollback before module setup, initial writes, or split creation. A module that never evaluates cannot run cleanup, so the early script must release its gate unaided.
|
|
57
|
+
- Check `document.readyState` before awaiting `DOMContentLoaded`. Preserve the original deadline through required preparation. For prerendering, arm the visible initialization budget on activation before revealing/starting; retain an activation recovery handler even if the bundle never arrives.
|
|
58
|
+
- Fetch/swap navigation gets a fresh incoming owner before insertion/hiding. Invalidate outgoing entrance recovery before the outro; cancel preparation, frames, and listeners before replacing DOM. Persisted chrome has its own record. An aborted fetch restores the outgoing page only if it remains current.
|
|
59
|
+
- On `pagehide`, invalidate pending work and leave the active page readable for bfcache. On `pageshow.persisted`, restore without replay and prevent old promises/timers from hiding it. Returning from a suspended tab rechecks elapsed deadlines.
|
|
60
|
+
|
|
61
|
+
## Intro and settled
|
|
62
|
+
|
|
63
|
+
Write reusable intro and outro builders only when behavior repeats. Each returns a timeline so the controller can compose, kill, reverse, or await it.
|
|
64
|
+
|
|
65
|
+
- Make settled the source of truth. It must not depend on a paused timeline.
|
|
66
|
+
- Clear temporary transform, visibility, transition, and `will-change` styles once settled.
|
|
67
|
+
- Run intro completion and settled callbacks once, including under reduced motion.
|
|
68
|
+
- On rapid state changes, replace, kill, or reverse the active timeline. Do not stack conflicting tweens.
|
|
69
|
+
- Update assistive text and state immediately. Animate the visual, not the meaning.
|
|
70
|
+
|
|
71
|
+
## Outro and end state
|
|
72
|
+
|
|
73
|
+
Start the outro from current rendered values. Keep the node in the DOM, laid out, and owned until the timeline completes.
|
|
74
|
+
|
|
75
|
+
- Reject duplicate outro requests or define which wins.
|
|
76
|
+
- If an intro is running, reverse it only when the outro is its exact inverse. Otherwise kill it and build the outro from current values.
|
|
77
|
+
- Disable pointer events when the visual can no longer support them, without removing the layout box.
|
|
78
|
+
- Run end-state work once. Only then remove, replace, hide, or navigate.
|
|
79
|
+
- Kill the active timeline on cleanup, but do not erase state a cover still needs.
|
|
80
|
+
- No `display: none`, `hidden` attribute, or DOM removal before the outro completes.
|
|
81
|
+
|
|
82
|
+
## Conditional show and hide
|
|
83
|
+
|
|
84
|
+
Toggling `hidden`, `display`, or removing a node ends it before an outro can play. Add a presence controller where that matters. It should:
|
|
85
|
+
|
|
86
|
+
- Show into initial state before the intro.
|
|
87
|
+
- Stay in the DOM through settled and outro.
|
|
88
|
+
- Keep the active timeline.
|
|
89
|
+
- On re-show during an outro, reverse only if that gives the intended intro. Otherwise kill, set from current values, and build a fresh intro.
|
|
90
|
+
- Hide or remove the node only after the end-state callback.
|
|
91
|
+
- Keep all five phases under reduced motion.
|
|
92
|
+
|
|
93
|
+
When content in a shared region changes size, decide who owns the region's geometry before showing either child. Overlap old and new inside a reserved wrapper, or animate a measured wrapper between known sizes. Do not let hide then show push surrounding content twice.
|
|
94
|
+
|
|
95
|
+
Do not use presence for content that can simply appear, or for page content a router already manages.
|
|
96
|
+
|
|
97
|
+
- Focus a panel when its intro completes, not when it is shown. An element at `visibility: hidden` refuses focus silently, and `autoAlpha: 0` is exactly that. Reduced motion completes synchronously, so the focus still lands.
|
|
98
|
+
- A dialog or menu that locks scroll, traps focus, or adds a key listener undoes all of it in its end-state callback, and again in `pagehide` in case the user leaves mid-open.
|
|
99
|
+
|
|
100
|
+
## Reduced and responsive motion
|
|
101
|
+
|
|
102
|
+
The OS preference is the default. Add a site override only if the product needs one.
|
|
103
|
+
|
|
104
|
+
Every effect needs initial, settled, and end states under reduced motion. Do not just shorten a disorienting effect. Skip travel, rotation, scale, parallax, and scrambling unless essential. A zero-duration timeline or an immediate `set` still fires completion for anything that depends on it.
|
|
105
|
+
|
|
106
|
+
Use `gsap.matchMedia()` for responsive and reduced-motion variants that must rebuild when conditions change. Create it inside the owner's context so it reverts with the owner.
|
|
107
|
+
|
|
108
|
+
A site-level override is not a media query, so `matchMedia` cannot see it. Read it in a shared `prefersReducedMotion()` helper that every timeline consults, mirror it as a root attribute so CSS can key on it, and rebuild `matchMedia` setups when it changes.
|
|
109
|
+
|
|
110
|
+
## Scroll
|
|
111
|
+
|
|
112
|
+
Use `gsap-scrolltrigger` for the API; these rules cover page lifetime and measurement.
|
|
113
|
+
|
|
114
|
+
- Create triggers in document order. Refresh after fonts, images, or dynamic content change layout, and after scroll restoration on a history navigation.
|
|
115
|
+
- Create triggers inside the owning context. Do not kill all triggers globally when one page leaves.
|
|
116
|
+
- A page can load already scrolled, by reload, hash, or history. Reveal-on-scroll targets above the restored position must not stay hidden. Let the trigger evaluate on creation and keep the pre-paint rule from outliving the initial phase.
|
|
117
|
+
- A `will-change` written from an `onToggle` callback is outside the context and survives its revert. Write it as a plain style and undo it in cleanup, or write it before the trigger is created.
|
|
118
|
+
|
|
119
|
+
Under reduced motion, go straight from initial to settled without unnecessary triggers. Keep outro and end callbacks that control navigation or removal.
|
|
120
|
+
|
|
121
|
+
## Text
|
|
122
|
+
|
|
123
|
+
Use SplitText when the effect needs per-character, word, or line targets.
|
|
124
|
+
|
|
125
|
+
- For character splits, keep scoped `font-kerning: none; text-rendering: optimizeSpeed` before, during, and after revert, including reduced motion. Wrappers disrupt kerning and can cause horizontal snapping; use words/lines if natural kerning is essential. See [SplitText limitations](https://gsap.com/docs/v3/Plugins/SplitText/#tips--limitations).
|
|
126
|
+
- Apparent weight changes can be clipped ink: check computed fonts/readiness, then mask edges, punctuation, and descenders. For confirmed clipping, add scoped mask padding with compensating negative margins; verify spacing and both hidden endpoints before trying compositing workarounds.
|
|
127
|
+
- Keep reading accessible with the plugin's ARIA support. If text contains links or controls, keep an unsplit accessible version instead of hiding them.
|
|
128
|
+
- Use word-aware wrapping for character animation. Use auto re-split for line animation that must survive width or font changes.
|
|
129
|
+
- When line measurement needs fonts, bound the wait or auto-split preparation by the [initialization deadline](initialization.md#bound-initialization-not-choreography). Reserve settled height before splitting if wrappers could shift layout.
|
|
130
|
+
- With `autoSplit`, build the animation inside `onSplit` and return it. The plugin records the playhead before a re-split, restores it on the new lines, and waits for fonts itself.
|
|
131
|
+
- A split heading takes its timing from the page phase, not its own clock. Give it its own pre-paint rule rather than marking it as a page target, or the page's stagger and the split's rise fight over one element.
|
|
132
|
+
- Revert splits on interruption and unmount. Do not leave wrapper spans in stale content.
|
|
133
|
+
|
|
134
|
+
Revert when the owning phase no longer needs the split. Compare glyph appearance, character positions, wrapping, and height immediately before/after cleanup at desktop/mobile widths, with reduced motion and interruption. Stable boxes alone do not prove stable ink; distinguish subpixel rounding from visible movement.
|
|
135
|
+
|
|
136
|
+
## Interaction
|
|
137
|
+
|
|
138
|
+
Pointer motion needs keyboard parity. Pair hover with focus on interactive elements. Do not animate a non-interactive element like a control.
|
|
139
|
+
|
|
140
|
+
Keep gestures bounded, provide a non-gesture path, and dispose of interaction plugins with their owner. See `gsap-plugins` for Draggable, Observer, and Flip APIs.
|
|
141
|
+
|
|
142
|
+
## Layout stability and performance
|
|
143
|
+
|
|
144
|
+
- Prefer `x`, `y`, scale, rotation, and `autoAlpha` over layout properties.
|
|
145
|
+
- Use `clip-path`, filters, and variable-font axes deliberately; they can cost paint or shift layout.
|
|
146
|
+
- Batch reads before writes.
|
|
147
|
+
- The stable wrapper's box should not jump between mount, initial, settled, outro, end, and unmount. Intentional transforms move pixels; layout boxes do not.
|
|
148
|
+
- Set `will-change` just before animating and clear it after. Do not promote everything.
|
|
149
|
+
- Do not animate hundreds of nodes at once. Reduce targets, batch, or virtualize.
|
|
150
|
+
- Do not add a CSS transition on a property GSAP controls.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Page load and unload
|
|
2
|
+
|
|
3
|
+
Read this for anything that happens when a document loads, is restored, or is left.
|
|
4
|
+
|
|
5
|
+
## Load lifecycle
|
|
6
|
+
|
|
7
|
+
**mount → initial state → intro → settled → outro → end state → unmount**
|
|
8
|
+
|
|
9
|
+
On a full-document site:
|
|
10
|
+
|
|
11
|
+
1. **Mount** is parsing. The DOM exists in pieces until parsing ends, and the browser may paint the top of a long page before it does.
|
|
12
|
+
2. **Initial state** is applied before the browser paints. Otherwise the user sees the settled page flash and then vanish into the intro.
|
|
13
|
+
3. **Intro** starts once targets exist and have their sizes: `DOMContentLoaded` for layout, `document.fonts.ready` for text, a specific image's `load` for a layout that depends on it.
|
|
14
|
+
4. **Settled** clears temporary styles and hands the page to CSS.
|
|
15
|
+
5. **Outro** runs on the live page after a link is clicked and before the browser follows it.
|
|
16
|
+
6. **End state** commits the navigation from the completion callback.
|
|
17
|
+
7. **Unmount** is the next document replacing this one. Nothing survives it.
|
|
18
|
+
|
|
19
|
+
Store the current phase as a data attribute on the page root. CSS and tests read it; nothing infers it from opacity or DOM presence.
|
|
20
|
+
|
|
21
|
+
## When scripts run
|
|
22
|
+
|
|
23
|
+
- An inline script in `head` runs before any content is parsed or painted. It is the only place that can set state before first paint in every browser.
|
|
24
|
+
- `defer` and `type="module"` scripts run after parsing and before `DOMContentLoaded`. The DOM is complete, but the browser may already have painted part of it. A deferred script cannot prevent that paint on its own.
|
|
25
|
+
- `async` scripts run whenever they arrive. Do not use them for lifecycle code.
|
|
26
|
+
- `blocking="render"` on a `head` script holds first paint until the script runs. Use it as a guarantee where supported, but keep the inline-script path as the baseline so other browsers do not flash.
|
|
27
|
+
- A module script can run after `DOMContentLoaded` already fired. Check `document.readyState` before waiting on the event.
|
|
28
|
+
|
|
29
|
+
## Initial state before first paint
|
|
30
|
+
|
|
31
|
+
Never hide content unconditionally in CSS. A user without JavaScript, a crawler, or a script that failed to load must still see the page.
|
|
32
|
+
|
|
33
|
+
- The inline `head` script sets a mark on `html` such as `data-motion="js"`. It can also skip the mark entirely under `prefers-reduced-motion`, so the page paints settled and no intro runs. Do not put a `data-phase` on `html`: the page root owns that attribute, and a second one on the document root reads to CSS, tests, and observers as another page changing phase.
|
|
34
|
+
- The page root ships with `data-phase="initial"` in the HTML, and one CSS rule hides intro targets only under the mark and only in that phase, for example `html[data-motion="js"] [data-page][data-phase="initial"] [data-intro] { visibility: hidden }`. It releases the moment the controller changes the phase.
|
|
35
|
+
- The controller writes every target's start values with `gsap.set` or `fromTo` before it changes the phase, so the release never shows the settled state.
|
|
36
|
+
- Use `visibility`, not `display`, so layout is measured with the elements in place.
|
|
37
|
+
|
|
38
|
+
The marking script arms an independent initialization deadline before hiding. Keep it active through preparation, not just controller registration. Roll back partial styles and split DOM on failure, then restore the current owner. Late work cannot hide a recovered visit. See [Initialization and recovery](initialization.md) for the full contract and checks.
|
|
39
|
+
|
|
40
|
+
## Waiting for the DOM, fonts, and media
|
|
41
|
+
|
|
42
|
+
- Build the controller on `DOMContentLoaded`, or immediately if the document is already interactive.
|
|
43
|
+
- Bound any required `document.fonts.ready` or SplitText auto-split preparation by the initialization deadline; use unsplit text on failure.
|
|
44
|
+
- Give images and media `width` and `height` or an aspect ratio so the intro does not wait for them. If a layout depends on an image without dimensions, wait for that image, not the whole `load` event.
|
|
45
|
+
- Refresh ScrollTrigger on `load` and after fonts, since both change document height.
|
|
46
|
+
|
|
47
|
+
## Navigation type
|
|
48
|
+
|
|
49
|
+
`performance.getEntriesByType("navigation")[0].type` reports how this document was reached: `navigate`, `reload`, `back_forward`, or `prerender`. Where the Navigation API exists, `navigation.activation.navigationType` reports `push`, `replace`, `reload`, or `traverse`.
|
|
50
|
+
|
|
51
|
+
- A new navigation gets the full intro.
|
|
52
|
+
- A reload gets the full intro or a shorter one. The user did not arrive anywhere.
|
|
53
|
+
- A history navigation to a fresh document gets an intro-only path with no travel. The user is returning. Never run an outro on the way back; the old page is gone before script hears about it.
|
|
54
|
+
- A prerendered document is handled below.
|
|
55
|
+
|
|
56
|
+
## Prerendered pages
|
|
57
|
+
|
|
58
|
+
With Speculation Rules the browser may load and run the next page before the user clicks. `document.prerendering` is true while that happens, and `prerenderingchange` fires once on activation.
|
|
59
|
+
|
|
60
|
+
Set initial state during prerendering. Start the intro and visible initialization deadline only after activation. Register that deadline’s activation handler in the early script so bundle failure still recovers. A timeline started while prerendering finishes invisibly, and the user gets a settled page with no intro.
|
|
61
|
+
|
|
62
|
+
`pagereveal` also fires on activation, so a listener there sees prerendered pages and bfcache restores as well as fresh loads.
|
|
63
|
+
|
|
64
|
+
## The bfcache
|
|
65
|
+
|
|
66
|
+
When the user leaves, the browser may freeze the document in the back-forward cache instead of destroying it. Coming back restores it as it was, timelines and all, and fires `pageshow` with `persisted` set to true.
|
|
67
|
+
|
|
68
|
+
- On `pagehide`, finish any outro instantly and leave the page in its readable settled state. That is what the user sees on return.
|
|
69
|
+
- On `pageshow` with `persisted`, do not replay the intro. Refresh ScrollTrigger, resync anything time-based, and resume what was paused.
|
|
70
|
+
- An outro end state that leaves the page faded or covered is a bug the user sees only when pressing back. Clear it in `pagehide`.
|
|
71
|
+
- Never add `unload` listeners. A `beforeunload` listener blocks the bfcache in some browsers unless removed after use. Use `pagehide`, which fires in both cases and reports `persisted`.
|
|
72
|
+
|
|
73
|
+
## Leaving a page with an outro
|
|
74
|
+
|
|
75
|
+
There is no router to intercept. Intercept the click.
|
|
76
|
+
|
|
77
|
+
- Listen on the document for clicks and resolve the closest `a[href]`. Leave native: modified clicks, non-primary buttons, other origins, `target`, `download`, `mailto` and `tel`, hash-only and same-location links, and links marked to opt out.
|
|
78
|
+
- Prevent default, run the outro, then follow the link with `location.assign(href)` from the end-state callback. A navigation started from a click handler still counts as user-initiated for View Transitions.
|
|
79
|
+
- Lock to one navigation. A second click during the outro is ignored, or retargets the destination if the design wants that.
|
|
80
|
+
- Race the outro against a timeout so a stalled timeline never traps the user on the page. GSAP's ticker stops in a hidden tab, so a click from a background tab must still navigate.
|
|
81
|
+
- Form submissions get no outro.
|
|
82
|
+
- Under reduced motion, run the end-state callback immediately.
|
|
83
|
+
|
|
84
|
+
Prefetch the destination during the outro with `<link rel="prefetch">` or Speculation Rules so the new document is ready when the outro ends. The outro's length is the only budget the network gets.
|
|
85
|
+
|
|
86
|
+
## Shell chrome
|
|
87
|
+
|
|
88
|
+
Header, navigation, and footer are rebuilt on every full load. An intro on them plays on every click.
|
|
89
|
+
|
|
90
|
+
- Play a chrome intro once per session, gated by `sessionStorage`, or not at all.
|
|
91
|
+
- Give chrome a `view-transition-name` so cross-document View Transitions hold it still while the content changes.
|
|
92
|
+
- Keep chrome out of the page outro unless the design wants it to leave.
|
|
93
|
+
|
|
94
|
+
## Hidden tabs
|
|
95
|
+
|
|
96
|
+
`requestAnimationFrame` and GSAP's ticker stop in a hidden tab. Anything that awaits a frame or a timeline can wait forever. Race frame waits against a short timeout, and expect timelines to finish when the tab becomes visible.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Same-document navigation
|
|
2
|
+
|
|
3
|
+
Read this only when the site fetches pages and swaps content without reloading the document.
|
|
4
|
+
|
|
5
|
+
## Decide whether to own a router
|
|
6
|
+
|
|
7
|
+
A same-document router must intercept links, fetch and parse HTML, swap content, update the title and URL, handle back and forward, restore scroll, move focus, re-run page scripts, cancel stale requests, and announce route changes. Swup, Barba, and Taxi do all of that and expose hooks where GSAP fits. Prefer one unless the project already owns a router or the user asks for one.
|
|
8
|
+
|
|
9
|
+
With a library, everything below still applies. Map its leave and enter hooks to outro and intro, return the timeline's promise so the library waits, and keep the lock, the cover, and cleanup as described.
|
|
10
|
+
|
|
11
|
+
## Page lifecycle
|
|
12
|
+
|
|
13
|
+
**mount → initial state → intro → settled → outro → end state → unmount**
|
|
14
|
+
|
|
15
|
+
1. **Outro.** The link is intercepted and the outgoing content plays its outro on live DOM while the next page is fetched.
|
|
16
|
+
2. **End state.** Outgoing targets finalize and completion runs once. Raise the cover over the route container.
|
|
17
|
+
3. **Unmount and mount.** The router replaces the container's children with the parsed content, updates the title, and pushes the URL.
|
|
18
|
+
4. **Initial state.** The new content is in the DOM, sized, and measured. Start values are written behind the cover.
|
|
19
|
+
5. **Intro.** Lower the cover and play one timeline to settled.
|
|
20
|
+
6. **Settled.** Clear temporary styles. CSS owns the page.
|
|
21
|
+
|
|
22
|
+
One navigation at a time. The first accepted destination wins through outro, fetch, swap, and cover. Release the lock when the intro starts, not when it ends, so a click mid-intro kills the intro and starts the outro from current values. Abort the in-flight fetch with an `AbortController` when a new destination is accepted.
|
|
23
|
+
|
|
24
|
+
A killed timeline never resolves its promise. Wrap `await` in a helper that also resolves on `onInterrupt` and returns whether the timeline completed.
|
|
25
|
+
|
|
26
|
+
## Intercepting links
|
|
27
|
+
|
|
28
|
+
Listen on the document for clicks and resolve the closest `a[href]`. Leave native: modified clicks, non-primary buttons, other origins, `target`, `download`, `mailto` and `tel`, hash-only and same-location links, and links marked to opt out. Use `pushState` for accepted links and `replaceState` for links marked replace.
|
|
29
|
+
|
|
30
|
+
Where the Navigation API exists, one `navigate` listener with `event.intercept({ handler })` covers link clicks, form submissions, and programmatic navigation, and reports `navigationType`. Keep the click path as the fallback for browsers without it.
|
|
31
|
+
|
|
32
|
+
## Fetching and swapping
|
|
33
|
+
|
|
34
|
+
- Fetch with an `Accept: text/html` header and parse with `DOMParser`. Take the route container's content, the `title`, and any `body` attributes such as `data-page` that pages differ on.
|
|
35
|
+
- Scripts inside fetched HTML do not execute when inserted. Register page setups in one module keyed by `data-page` and call the matching one after the swap. Do not rely on inline page scripts.
|
|
36
|
+
- Stylesheets some pages add must be loaded before those pages are revealed. Append the `link` and wait for its `load` event.
|
|
37
|
+
- Keep one route container. Persistent chrome lives outside it and never reloads. Its state, timelines, and listeners survive navigation, which is the reason to go same-document at all.
|
|
38
|
+
- Overlap old and new only inside a reserved wrapper so one box owns the geometry. Hold the container's height during the swap, or animate it between measured sizes on purpose.
|
|
39
|
+
- Keep the cover inside the route container, not fixed to the viewport, unless the effect is a full-screen wipe on purpose.
|
|
40
|
+
|
|
41
|
+
## History, scroll, and focus
|
|
42
|
+
|
|
43
|
+
- Set `history.scrollRestoration` to `manual` and own it. On push, scroll to top or to the hash target after the swap. Save the scroll position in the history state before leaving so `popstate` can restore it after the swap, then refresh ScrollTrigger.
|
|
44
|
+
- Back and forward never run an outro. On `popstate` the URL has already changed. Fetch, swap, and run initial state and intro only, or wrap the swap in `document.startViewTransition` so it is not a hard cut.
|
|
45
|
+
- After the swap, move focus to the route container or its main heading if focus was on removed content or on `body`. Give the target `tabindex="-1"` and a focus style that fits the design.
|
|
46
|
+
- Update `document.title` and announce the new page through a live region.
|
|
47
|
+
- Do not transition to the current URL. Treat search-param changes as page changes only when they mean a different screen.
|
|
48
|
+
|
|
49
|
+
## Cleanup on unmount
|
|
50
|
+
|
|
51
|
+
Before replacing the container's children:
|
|
52
|
+
|
|
53
|
+
- Revert the page's GSAP context, which kills its tweens, triggers, and splits and clears their inline styles.
|
|
54
|
+
- Remove listeners, observers, timers, and plugin instances the page created.
|
|
55
|
+
- Undo anything the page changed outside its container: scroll locks, root attributes, theme, body classes.
|
|
56
|
+
- Do not kill triggers globally. Chrome and the next page own theirs.
|
|
57
|
+
|
|
58
|
+
## Combining with same-document View Transitions
|
|
59
|
+
|
|
60
|
+
`document.startViewTransition(() => swap())` snapshots the old content, runs the swap, and animates to the new snapshot. Use it for history navigation and plain crossfades. The rules are the same as cross-document: one engine per element, GSAP intros after `finished` for touched elements, and `::view-transition { pointer-events: none }`.
|
|
61
|
+
|
|
62
|
+
## Cases to design for
|
|
63
|
+
|
|
64
|
+
- Navigation requested mid-intro.
|
|
65
|
+
- Two destinations clicked quickly.
|
|
66
|
+
- A fetch that fails or returns something that is not HTML. Fall back to `location.assign`.
|
|
67
|
+
- A slow fetch. The cover stays up; show a hint after a delay.
|
|
68
|
+
- Back or forward with no outro.
|
|
69
|
+
- A page that changes body classes, theme, or scroll lock.
|
|
70
|
+
- A page setup that should run on every visit versus once per session.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Verification
|
|
2
|
+
|
|
3
|
+
Check in proportion to what changed. Do not turn a focused animation task into a full audit.
|
|
4
|
+
|
|
5
|
+
## Always
|
|
6
|
+
|
|
7
|
+
- Run the repo's type, lint, format, and test commands where they exist.
|
|
8
|
+
- Confirm settled content is visible, interactive, and free of leftover GSAP inline styles.
|
|
9
|
+
- Confirm timelines, triggers, listeners, and plugin DOM changes are cleaned up.
|
|
10
|
+
- Confirm the page is readable with JavaScript disabled and with the pre-paint mark set but the main script blocked.
|
|
11
|
+
- Test reduced motion when the change has a reduced-motion branch.
|
|
12
|
+
|
|
13
|
+
## Initially hidden content
|
|
14
|
+
|
|
15
|
+
Run the [failure verification matrix](initialization.md#failure-verification) when adding or changing hiding, preparation, or recovery. It covers disabled JavaScript, a blocked bundle after the marker, throws before/after styles and splits, stalled fonts/media, late initialization, no-flash success, reduced motion, and interruption/repeated setup. Assert text and native links, not opacity alone. Include shell/footer and intentionally hidden content.
|
|
16
|
+
|
|
17
|
+
Use this framework's [integration rules](motion-system.md#initialization-and-recovery) for rendering and navigation expectations. Measure document-load LCP separately from transitions when first-load behavior changes; report measured results and untested paths.
|
|
18
|
+
|
|
19
|
+
## Runtime changes
|
|
20
|
+
|
|
21
|
+
Check the changed lifecycle in a real browser when practical:
|
|
22
|
+
|
|
23
|
+
- Initial state is applied before first paint. Throttle the network and reload; no settled content flashes.
|
|
24
|
+
- Intro ends in one settled state.
|
|
25
|
+
- Outro keeps the node in the DOM until completion runs.
|
|
26
|
+
- Rapid or interrupted input ends in one coherent state.
|
|
27
|
+
- Layout boxes do not jump.
|
|
28
|
+
|
|
29
|
+
For full-document navigation, test an ordinary internal link, a reload, back and forward, a link clicked twice quickly, and a click from a background tab. Confirm URL, visible page, focus, history, and scroll agree. Press back after an outro and confirm the restored page is readable, whether it came from the bfcache or a fresh load.
|
|
30
|
+
|
|
31
|
+
With cross-document View Transitions, confirm no element is animated by both engines, names are cleared after each transition, clicks land during a running transition, and the site still works with the transition unsupported.
|
|
32
|
+
|
|
33
|
+
For same-document navigation, also test a failed fetch, a slow fetch, and a page that changed body classes or scroll lock.
|
|
34
|
+
|
|
35
|
+
For conditional components, test show, hide, and one interruption. Confirm removal happens after the outro.
|
|
36
|
+
|
|
37
|
+
## Builds and wider checks
|
|
38
|
+
|
|
39
|
+
Run a production build for changes to the build setup, dependencies, or anything release-facing. Run wider browser, accessibility, responsive, and performance checks only when the change touches them or the user asks for a full audit.
|
|
40
|
+
|
|
41
|
+
Report which checks ran and which could not. Do not claim runtime behavior was verified when only static review was possible.
|