tribunal-kit 6.0.1 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ARCHITECTURE.md +9 -6
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/history/memory/.memory.idx +1532 -1
- package/.agent/history/memory/MEMORY.md +102 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2033 -263
- package/.agent/rules/GEMINI.md +11 -9
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/compile_router.py +4 -111
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +118 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +120 -151
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +9 -7
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +22 -3
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
- package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
- package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +2 -1
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +10 -12
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +2 -1
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/CONTRIBUTING.md +3 -3
- package/README.md +94 -44
- package/SECURITY.md +10 -10
- package/bin/mcp-server.js +385 -252
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +40 -46
- package/dist/cli.js +6 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/status.js +6 -0
- package/dist/index.d.ts +8 -1
- package/package.json +13 -12
- package/scripts/benchmark.js +62 -86
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before auditing or fixing animation performance, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Browser Rendering Pipeline (Section 22) → Restrict properties to Composite-only (`transform`, `opacity`) and eliminate Layout/Paint animators
|
|
24
25
|
2. Layout Thrashing (Section 33) → Batch all DOM reads (`offsetHeight`, `getBoundingClientRect`) before executing DOM writes (`style.height = ...`)
|
|
25
26
|
3. `will-change` VRAM management (Section 53) → Remove `will-change` hints upon animation completion
|
|
@@ -31,6 +32,7 @@ Guidelines for auditing and resolving web animation jank, layout thrashing, and
|
|
|
31
32
|
## 1. Browser Rendering Pipeline & Compositor Rules
|
|
32
33
|
|
|
33
34
|
Animations trigger one of 3 rendering costs:
|
|
35
|
+
|
|
34
36
|
1. **Layout (Expensive)**: Animating `width`, `height`, `margin`, `padding`, `top`, `left`, `flex`, `grid`. Forces full geometry recalculation across the page.
|
|
35
37
|
2. **Paint (Moderate)**: Animating `color`, `background-color`, `border-color`, `box-shadow`, `filter`. Forces pixel repaint.
|
|
36
38
|
3. **Composite (GPU Fast)**: Animating **`transform`** (`translate`, `scale`, `rotate`) and **`opacity`**. Offloaded entirely to GPU compositor thread!
|
|
@@ -75,11 +77,11 @@ elements.forEach((el, i) => {
|
|
|
75
77
|
|
|
76
78
|
## Anti-Slop Table
|
|
77
79
|
|
|
78
|
-
| Performance Issue
|
|
79
|
-
|
|
|
80
|
-
| Animating `height: 0` to `auto`
|
|
81
|
-
| Scroll listener mutating inline CSS | `CSS scroll-timeline` or `IntersectionObserver`
|
|
82
|
-
| `transition: all 0.3s`
|
|
80
|
+
| Performance Issue | Motion Performance Fix | FPS Gain |
|
|
81
|
+
| ----------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------- |
|
|
82
|
+
| Animating `height: 0` to `auto` | FLIP technique or `scaleY` transform animation | 15fps → 60fps |
|
|
83
|
+
| Scroll listener mutating inline CSS | `CSS scroll-timeline` or `IntersectionObserver` | Prevents main-thread scroll jank |
|
|
84
|
+
| `transition: all 0.3s` | `transition: transform 200ms cubic-bezier(0.16,1,0.3,1), opacity 200ms ease` | Eliminates accidental layout/color recalculations |
|
|
83
85
|
|
|
84
86
|
---
|
|
85
87
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before writing Framer Motion code in React, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `package.json` / Next.js Client Boundaries → Add `"use client"` directive on Next.js App Router files containing `motion.X`
|
|
24
25
|
2. AnimatePresence & layoutId Rules (Section 117) → Enforce `mode="wait"` and ensure every `<AnimatePresence>` child has a unique `key`
|
|
25
26
|
3. Bundle Optimization (Section 182) → Use `<LazyMotion features={domAnimation}>` with `m.div` for lightweight production bundles
|
|
@@ -44,8 +45,13 @@ Before writing Framer Motion code in React, you MUST inspect:
|
|
|
44
45
|
### `motion.X` / Declarative Animation
|
|
45
46
|
|
|
46
47
|
```tsx
|
|
47
|
-
import { motion } from
|
|
48
|
-
<motion.div
|
|
48
|
+
import { motion } from 'framer-motion';
|
|
49
|
+
<motion.div
|
|
50
|
+
initial={{ opacity: 0, y: 20 }}
|
|
51
|
+
animate={{ opacity: 1, y: 0 }}
|
|
52
|
+
exit={{ opacity: 0, y: -20 }}
|
|
53
|
+
transition={{ duration: 0.3, ease: 'easeOut' }}
|
|
54
|
+
/>;
|
|
49
55
|
```
|
|
50
56
|
|
|
51
57
|
### Variants (Stagger / Orchestration)
|
|
@@ -56,11 +62,11 @@ const container = {
|
|
|
56
62
|
visible: { transition: { staggerChildren: 0.08, delayChildren: 0.1 } },
|
|
57
63
|
};
|
|
58
64
|
const item = {
|
|
59
|
-
hidden: { opacity: 0, y: 20, filter:
|
|
60
|
-
visible: { opacity: 1, y: 0, filter:
|
|
65
|
+
hidden: { opacity: 0, y: 20, filter: 'blur(4px)' },
|
|
66
|
+
visible: { opacity: 1, y: 0, filter: 'blur(0px)', transition: { duration: 0.4 } },
|
|
61
67
|
};
|
|
62
68
|
<motion.ul variants={container} initial="hidden" animate="visible">
|
|
63
|
-
{list.map(
|
|
69
|
+
{list.map(e => (
|
|
64
70
|
<motion.li key={e.id} variants={item}>
|
|
65
71
|
{e.name}
|
|
66
72
|
</motion.li>
|
|
@@ -131,10 +137,15 @@ import { LayoutGroup } from "framer-motion";
|
|
|
131
137
|
|
|
132
138
|
```tsx
|
|
133
139
|
<AnimatePresence mode="sync">
|
|
134
|
-
{
|
|
140
|
+
{' '}
|
|
135
141
|
{/* "sync"|"wait"|"popLayout" */}
|
|
136
|
-
{items.map(
|
|
137
|
-
<motion.div
|
|
142
|
+
{items.map(item => (
|
|
143
|
+
<motion.div
|
|
144
|
+
key={item.id}
|
|
145
|
+
/* ← REQUIRED */ initial={{ opacity: 0, height: 0 }}
|
|
146
|
+
animate={{ opacity: 1, height: 'auto' }}
|
|
147
|
+
exit={{ opacity: 0, height: 0 }}
|
|
148
|
+
/>
|
|
138
149
|
))}
|
|
139
150
|
</AnimatePresence>
|
|
140
151
|
// mode="wait" — waits for exit before entering
|
|
@@ -146,7 +157,7 @@ import { LayoutGroup } from "framer-motion";
|
|
|
146
157
|
## Scroll Animations
|
|
147
158
|
|
|
148
159
|
```tsx
|
|
149
|
-
import { useScroll, useTransform } from
|
|
160
|
+
import { useScroll, useTransform } from 'framer-motion';
|
|
150
161
|
// Page scroll progress (0–1)
|
|
151
162
|
const { scrollYProgress } = useScroll();
|
|
152
163
|
const y = useTransform(scrollYProgress, [0, 1], [0, -200]);
|
|
@@ -155,7 +166,7 @@ const opacity = useTransform(scrollYProgress, [0, 0.5], [1, 0]);
|
|
|
155
166
|
|
|
156
167
|
// Element-scoped scroll
|
|
157
168
|
const ref = useRef(null);
|
|
158
|
-
const { scrollYProgress } = useScroll({ target: ref, offset: [
|
|
169
|
+
const { scrollYProgress } = useScroll({ target: ref, offset: ['start end', 'end start'] });
|
|
159
170
|
```
|
|
160
171
|
|
|
161
172
|
---
|
|
@@ -165,9 +176,9 @@ const { scrollYProgress } = useScroll({ target: ref, offset: ["start end", "end
|
|
|
165
176
|
### `useAnimate` — Imperative sequences
|
|
166
177
|
|
|
167
178
|
```tsx
|
|
168
|
-
import { useAnimate, stagger } from
|
|
179
|
+
import { useAnimate, stagger } from 'framer-motion';
|
|
169
180
|
const [scope, animate] = useAnimate(); // ← returns [scope, animate] NOT [ref, controls]
|
|
170
|
-
await animate(
|
|
181
|
+
await animate('.item', { opacity: 1 }, { delay: stagger(0.1) });
|
|
171
182
|
<div ref={scope}>...</div>;
|
|
172
183
|
```
|
|
173
184
|
|
|
@@ -194,7 +205,7 @@ const skewX = useTransform(xVel, [-1000, 0, 1000], [-15, 0, 15]);
|
|
|
194
205
|
|
|
195
206
|
```tsx
|
|
196
207
|
// LazyMotion — ~5KB vs ~30KB full bundle
|
|
197
|
-
import { LazyMotion, domAnimation, m } from
|
|
208
|
+
import { LazyMotion, domAnimation, m } from 'framer-motion';
|
|
198
209
|
// domAnimation ≈ 5KB | domMax ≈ 20KB (needed for layout/drag)
|
|
199
210
|
<LazyMotion features={domAnimation}>
|
|
200
211
|
<m.div animate={{ opacity: 1 }} />
|
|
@@ -204,10 +215,13 @@ import { LazyMotion, domAnimation, m } from "framer-motion";
|
|
|
204
215
|
### Accessibility
|
|
205
216
|
|
|
206
217
|
```tsx
|
|
207
|
-
import { useReducedMotion } from
|
|
218
|
+
import { useReducedMotion } from 'framer-motion';
|
|
208
219
|
const reduce = useReducedMotion();
|
|
209
220
|
// opacity/color: always safe | position/scale/rotation: must be disabled when reduce=true
|
|
210
|
-
<motion.div
|
|
221
|
+
<motion.div
|
|
222
|
+
animate={{ x: reduce ? 0 : 100, opacity: 1 }}
|
|
223
|
+
transition={{ duration: reduce ? 0 : 0.5 }}
|
|
224
|
+
/>;
|
|
211
225
|
```
|
|
212
226
|
|
|
213
227
|
### Rules
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing front-end designs or CSS layout systems, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Relative Color Syntax (Section 16) → Derive hover/active states dynamically with `oklch(from var(--color-primary) calc(l - 0.08) c h)`
|
|
24
25
|
2. Nested Radius Math (Section 54) → Enforce `outer_radius = inner_radius + padding_inner` for nested card containers
|
|
25
26
|
3. APCA Contrast Thresholds (Section 81) → Ensure Lc > 75 for body text, Lc > 60 for headings, and Lc > 45 for borders and labels
|
|
@@ -31,21 +32,22 @@ This skill guides the implementation of responsive layout systems, color science
|
|
|
31
32
|
## 1. Relative Color Syntax & OKLCH Theme Tokens
|
|
32
33
|
|
|
33
34
|
Perceptually uniform color science ensures stable contrast. Use CSS **Relative Color Syntax** to derive state colors dynamically:
|
|
35
|
+
|
|
34
36
|
```css
|
|
35
37
|
:root {
|
|
36
38
|
/* base color values */
|
|
37
|
-
--color-primary: oklch(62% 0.21 250);
|
|
38
|
-
|
|
39
|
+
--color-primary: oklch(62% 0.21 250); /* Brand electric blue */
|
|
40
|
+
|
|
39
41
|
/* Deriving hover states dynamically: reduce lightness, preserve chroma and hue */
|
|
40
42
|
--color-primary-hover: oklch(from var(--color-primary) calc(l - 0.08) c h);
|
|
41
43
|
--color-primary-active: oklch(from var(--color-primary) calc(l - 0.12) c h);
|
|
42
|
-
|
|
44
|
+
|
|
43
45
|
/* Backgrounds */
|
|
44
46
|
--bg-surface: oklch(100% 0 0);
|
|
45
47
|
--text-main: oklch(20% 0.02 250);
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
[data-theme=
|
|
50
|
+
[data-theme='dark'] {
|
|
49
51
|
--bg-surface: oklch(14% 0.008 250);
|
|
50
52
|
--text-main: oklch(93% 0.003 250);
|
|
51
53
|
}
|
|
@@ -56,19 +58,21 @@ Perceptually uniform color science ensures stable contrast. Use CSS **Relative C
|
|
|
56
58
|
## 2. Spatial Grid Math & Radius Tokens
|
|
57
59
|
|
|
58
60
|
Enforce an 8px spatial grid calculated mathematically to ensure alignment precision:
|
|
61
|
+
|
|
59
62
|
```css
|
|
60
63
|
:root {
|
|
61
64
|
--base-grid: 8px;
|
|
62
|
-
|
|
63
|
-
--space-xs:
|
|
64
|
-
--space-sm:
|
|
65
|
-
--space-md:
|
|
66
|
-
--space-lg:
|
|
67
|
-
--space-xl:
|
|
65
|
+
|
|
66
|
+
--space-xs: calc(var(--base-grid) * 0.5); /* 4px - icon gaps */
|
|
67
|
+
--space-sm: calc(var(--base-grid) * 1); /* 8px - tag paddings */
|
|
68
|
+
--space-md: calc(var(--base-grid) * 2); /* 16px - inputs */
|
|
69
|
+
--space-lg: calc(var(--base-grid) * 3); /* 24px - card padding */
|
|
70
|
+
--space-xl: calc(var(--base-grid) * 4); /* 32px - section gaps */
|
|
68
71
|
}
|
|
69
72
|
```
|
|
70
73
|
|
|
71
74
|
### Nested Radius Formula
|
|
75
|
+
|
|
72
76
|
Ensure component inner borders track correctly:
|
|
73
77
|
`outer_radius = inner_radius + padding_inner`
|
|
74
78
|
If container padding is `16px` and inner content radius is `8px`, then container outer radius must be exactly `24px` (`8px + 16px`).
|
|
@@ -78,6 +82,7 @@ If container padding is `16px` and inner content radius is `8px`, then container
|
|
|
78
82
|
## 3. Responsive Layouts & Container Queries
|
|
79
83
|
|
|
80
84
|
Avoid viewport-level media queries for self-contained components. Use container queries to make components portable:
|
|
85
|
+
|
|
81
86
|
```css
|
|
82
87
|
.component-wrapper {
|
|
83
88
|
container-type: inline-size;
|
|
@@ -98,15 +103,18 @@ Avoid viewport-level media queries for self-contained components. Use container
|
|
|
98
103
|
## 4. APCA Contrast Guidelines
|
|
99
104
|
|
|
100
105
|
Ensure that typography meets the APCA Lc guidelines:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
|
|
107
|
+
- Lc > 75 for body text elements.
|
|
108
|
+
- Lc > 60 for large titles and headings.
|
|
109
|
+
- Lc > 45 for secondary input labels and border guides.
|
|
104
110
|
|
|
105
111
|
---
|
|
106
112
|
|
|
107
113
|
## Pre-Flight Checklist
|
|
114
|
+
|
|
108
115
|
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
109
116
|
- [ ] Have I checked the environment for relevant existing implementations?
|
|
110
117
|
|
|
111
118
|
## VBC Protocol (Verification-Before-Completion)
|
|
119
|
+
|
|
112
120
|
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before auditing or writing client-side code, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. XSS Sanitize Rules (Section 28) → Require DOMPurify for any `dangerouslySetInnerHTML` and audit dynamic `javascript:` URIs
|
|
24
25
|
2. HttpOnly Auth Token Storage (Section 34) → Ban storing JWTs or auth tokens in `localStorage` or `sessionStorage`; use `HttpOnly`, `Secure`, `SameSite` cookies
|
|
25
26
|
3. PostMessage Origin Verification (Section 46) → Never use `targetOrigin: '*'` and always validate `event.origin` on receiving handlers
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before designing gameplay systems or controller feel, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. 3Cs Foundation (Character, Camera, Controls) (Section 25) → Implement input buffering (~150ms) and coyote time (~100ms) before designing enemy AI or progression
|
|
24
25
|
2. Macro Gameplay Loop Validation (Section 42) → Ensure upgrading systems directly alter action and combat feel to prevent player churn
|
|
25
26
|
3. Juicing & Hitstop Feel (Section 58) → Incorporate screen shake, hitstop (3 freeze frames), particle explosions, and squash-and-stretch for impact feedback
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before engineering game state loops or physics engines, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Clamped DeltaTime Rule (Section 25) → Clamp `deltaTime` (max 0.05s) to prevent physics explosions on frame rate drops
|
|
24
25
|
2. Garbage Collection & Object Pooling (Section 50) → Pre-allocate and pool game objects; ban `Instantiate()` or dynamic memory allocations in frame update loops
|
|
25
26
|
3. FixedUpdate vs Update Separation (Section 43) → Put all physics logic in `FixedUpdate()`; use `Update()` strictly for visual interpolation and input collection
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing Generative UI streaming pipelines, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Tool Parameter Schemas (Section 87) → Validate all LLM tool parameters with Zod schemas
|
|
24
25
|
2. RSC Server Action Boundaries (Section 33) → Annotate server actions with `"use server"` and yield Server Components directly from `streamUI`
|
|
25
26
|
3. Intermediate Skeleton Yielding (Section 80) → Always `yield <SkeletonLoader />` before awaiting async APIs or external LLM tool calls
|
|
@@ -74,11 +75,11 @@ Use this when you need strict JSON streams for charts, tables, or complex states
|
|
|
74
75
|
|
|
75
76
|
```typescript
|
|
76
77
|
const result = await streamObject({
|
|
77
|
-
model: openai(
|
|
78
|
+
model: openai('gpt-4-turbo'),
|
|
78
79
|
schema: z.object({
|
|
79
80
|
points: z.array(z.object({ x: z.number(), y: z.number() })),
|
|
80
81
|
}),
|
|
81
|
-
prompt:
|
|
82
|
+
prompt: 'Generate a sales forecast chart data',
|
|
82
83
|
});
|
|
83
84
|
// Client consumes via useObject
|
|
84
85
|
```
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before optimizing content for AI engine ingestion, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. High Information Density Rule (Section 25) → Maximize factual density; eliminate marketing boilerplate so LLM context windows aren't truncated
|
|
24
25
|
2. Explicit Claim-to-Source Mapping (Section 51) → Map stats and claims directly to explicit `<cite>` sources/links; ban vague unanchored assertions
|
|
25
26
|
3. Text-Based Architecture Diagrams (Section 94) → Represent architecture via text/Mermaid.js code blocks; ban image-only architecture diagrams
|
|
@@ -49,7 +50,7 @@ Modern sites should natively serve structured markdown if they detect an AI User
|
|
|
49
50
|
```typescript
|
|
50
51
|
// Next.js Edge Middleware for GEO
|
|
51
52
|
export function middleware(req: NextRequest) {
|
|
52
|
-
const ua = req.headers.get(
|
|
53
|
+
const ua = req.headers.get('user-agent') || '';
|
|
53
54
|
const isBot = /ChatGPT|Perplexity|ClaudeBot/i.test(ua);
|
|
54
55
|
|
|
55
56
|
if (isBot) {
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before running complex Git operations or writing release workflows, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Safe Force Push Rule (Section 18) → Use `--force-with-lease` exclusively; ban raw `git push --force` on shared/remote branches
|
|
24
25
|
2. Reflog Recovery Strategy (Section 30) → Inspect `git reflog` to recover lost commits or bad resets before discarding uncommitted state
|
|
25
26
|
3. OIDC Authentication Protocol (Section 208) → Configure OIDC AWS auth (`id-token: write`) in GitHub Actions workflows; ban static AWS access keys
|
|
@@ -166,18 +167,18 @@ git checkout main
|
|
|
166
167
|
```javascript
|
|
167
168
|
// release.config.js
|
|
168
169
|
export default {
|
|
169
|
-
branches: [
|
|
170
|
+
branches: ['main', { name: 'beta', prerelease: true }],
|
|
170
171
|
plugins: [
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
'@semantic-release/commit-analyzer', // reads conventional commits
|
|
173
|
+
'@semantic-release/release-notes-generator',
|
|
174
|
+
'@semantic-release/changelog', // updates CHANGELOG.md
|
|
175
|
+
'@semantic-release/npm', // bumps package.json version
|
|
176
|
+
'@semantic-release/github', // creates GitHub Release
|
|
176
177
|
[
|
|
177
|
-
|
|
178
|
+
'@semantic-release/git',
|
|
178
179
|
{
|
|
179
|
-
assets: [
|
|
180
|
-
message:
|
|
180
|
+
assets: ['CHANGELOG.md', 'package.json'],
|
|
181
|
+
message: 'chore(release): ${nextRelease.version} [skip ci]',
|
|
181
182
|
},
|
|
182
183
|
],
|
|
183
184
|
],
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before running Git commands or writing GitHub workflows, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Local-Only Interactive Rebase (Section 172) → Perform interactive rebases (`git rebase -i`) ONLY on local unpushed commits; ban rebasing public/shared history
|
|
24
25
|
2. Conventional Commit Standards (Section 55) → Format commit messages using Conventional Commits (`type(scope): description`) for automated changelogs
|
|
25
26
|
3. Squash Merge Default (Section 146) → Enforce squash merge strategy for feature branches merging into main to keep history linear and clean
|
|
@@ -295,7 +296,7 @@ npx commitlint --edit $1
|
|
|
295
296
|
```javascript
|
|
296
297
|
// commitlint.config.js
|
|
297
298
|
export default {
|
|
298
|
-
extends: [
|
|
299
|
+
extends: ['@commitlint/config-conventional'],
|
|
299
300
|
};
|
|
300
301
|
```
|
|
301
302
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before generating UI layouts or visual code, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Structural Layout Variance (Section 24) → Vary structural layout across sections; ban uniform 3-card bento grids
|
|
24
25
|
2. OKLCH Perceptual Palette (Section 30) → Declare all color tokens using OKLCH color space for perceptual uniformity
|
|
25
26
|
3. Zero Truncation Rule (Section 39) → Strictly ban `// TODO: add remaining items` placeholder comments; generate complete production-ready code
|
|
@@ -31,21 +32,27 @@ Inject high-agency visual judgment and layout variance into AI-generated interfa
|
|
|
31
32
|
## 4 High-Agency Visual Constraints
|
|
32
33
|
|
|
33
34
|
### 1. Structural Layout Variance
|
|
35
|
+
|
|
34
36
|
Never use standard symmetrical layouts by default. Vary structural axes across sections:
|
|
37
|
+
|
|
35
38
|
- **Hero**: Asymmetric 60/40 split or left-aligned stacked text with offset app preview frame.
|
|
36
39
|
- **Features**: Alternating 2-column image/text rhythm or horizontal scroll cards.
|
|
37
40
|
- **CTA**: Single full-width card with progressive backdrop blur overlay.
|
|
38
41
|
|
|
39
42
|
### 2. OKLCH Perceptual Palette Generation
|
|
43
|
+
|
|
40
44
|
Always generate color schemes in OKLCH:
|
|
45
|
+
|
|
41
46
|
- Background: `oklch(0.98 0.005 240)`
|
|
42
47
|
- Foreground: `oklch(0.18 0.01 240)`
|
|
43
48
|
- Accent: `oklch(0.62 0.22 250)`
|
|
44
49
|
|
|
45
50
|
### 3. GSAP / Motion Engineering Integration
|
|
51
|
+
|
|
46
52
|
When animation is requested, use explicit GSAP timelines with custom easing curves (`power3.out`, `expo.out`), avoiding default linear transitions.
|
|
47
53
|
|
|
48
54
|
### 4. Zero Output Truncation
|
|
55
|
+
|
|
49
56
|
Never output placeholder `// TODO: add remaining items` comments in UI code. Generate full, production-ready JSX/CSS markup.
|
|
50
57
|
|
|
51
58
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before creating or editing GSAP animations, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Transform Aliases vs Layout Properties (Section 74) → Animate transform aliases (`x`, `y`, `scale`, `rotation`); ban animating layout-heavy properties (`width`, `height`, `top`, `left`)
|
|
24
25
|
2. GSAP 3 Object Syntax (Section 280) → Use GSAP 3 object parameter syntax (`gsap.to(target, { duration: 1, x: 100 })`); ban legacy GSAP 2 signature (`gsap.to(target, 1, { x: 100 })`)
|
|
25
26
|
3. Accessible Responsive Motion with matchMedia (Section 213) → Wrap responsive or reduced-motion animations in `gsap.matchMedia()`; set `duration: 0` when `prefers-reduced-motion` matches
|
|
@@ -109,9 +110,9 @@ Relative values work: `x: "+=20"`, `rotation: "-=30"`. Default units: x/y in px,
|
|
|
109
110
|
- **clearProps** — Comma-separated list of property names (or `"all"` / `true`) to **remove** from the element’s inline style when the tween completes. Use when a class or other CSS should take over after the animation. Clearing any transform-related property (e.g. `x`, `scale`, `rotation`) clears the **entire** transform.
|
|
110
111
|
|
|
111
112
|
```javascript
|
|
112
|
-
gsap.to(
|
|
113
|
-
gsap.to(
|
|
114
|
-
gsap.to(svgEl, { rotation: 90, svgOrigin:
|
|
113
|
+
gsap.to('.box', { x: 100, rotation: '360_cw', duration: 1 });
|
|
114
|
+
gsap.to('.fade', { autoAlpha: 0, duration: 0.5, clearProps: 'visibility' });
|
|
115
|
+
gsap.to(svgEl, { rotation: 90, svgOrigin: '100 100' });
|
|
115
116
|
```
|
|
116
117
|
|
|
117
118
|
## Targets
|
|
@@ -123,7 +124,7 @@ gsap.to(svgEl, { rotation: 90, svgOrigin: "100 100" });
|
|
|
123
124
|
Offset the animation of each item by 0.1 second like this:
|
|
124
125
|
|
|
125
126
|
```javascript
|
|
126
|
-
gsap.to(
|
|
127
|
+
gsap.to('.item', {
|
|
127
128
|
y: -20,
|
|
128
129
|
stagger: 0.1,
|
|
129
130
|
});
|
|
@@ -140,11 +141,11 @@ https://gsap.com/resources/getting-started/Staggers
|
|
|
140
141
|
Use string eases unless a custom curve is needed:
|
|
141
142
|
|
|
142
143
|
```javascript
|
|
143
|
-
ease:
|
|
144
|
-
ease:
|
|
145
|
-
ease:
|
|
146
|
-
ease:
|
|
147
|
-
ease:
|
|
144
|
+
ease: 'power1.out'; // default feel
|
|
145
|
+
ease: 'power3.inOut';
|
|
146
|
+
ease: 'back.out(1.7)'; // overshoot
|
|
147
|
+
ease: 'elastic.out(1, 0.3)';
|
|
148
|
+
ease: 'none'; // linear
|
|
148
149
|
```
|
|
149
150
|
|
|
150
151
|
Built-in eases: base (same as `.out`), `.in`, `.out`, `.inOut` where "power" refers to the strength of the curve (1 is more gradual, 4 is steepest):
|
|
@@ -169,17 +170,20 @@ base (out) .in .out .inOut
|
|
|
169
170
|
Simple cubic-bezier values (as used in CSS `cubic-bezier()`):
|
|
170
171
|
|
|
171
172
|
```javascript
|
|
172
|
-
const myEase = CustomEase.create(
|
|
173
|
+
const myEase = CustomEase.create('my-ease', '.17,.67,.83,.67');
|
|
173
174
|
|
|
174
|
-
gsap.to(
|
|
175
|
+
gsap.to('.item', { x: 100, ease: myEase, duration: 1 });
|
|
175
176
|
```
|
|
176
177
|
|
|
177
178
|
Complex curve with any number of control points, described as normalized SVG path data:
|
|
178
179
|
|
|
179
180
|
```javascript
|
|
180
|
-
const myEase = CustomEase.create(
|
|
181
|
+
const myEase = CustomEase.create(
|
|
182
|
+
'hop',
|
|
183
|
+
'M0,0 C0,0 0.056,0.442 0.175,0.442 0.294,0.442 0.332,0 0.332,0 0.332,0 0.414,1 0.671,1 0.991,1 1,0 1,0',
|
|
184
|
+
);
|
|
181
185
|
|
|
182
|
-
gsap.to(
|
|
186
|
+
gsap.to('.item', { x: 100, ease: myEase, duration: 1 });
|
|
183
187
|
```
|
|
184
188
|
|
|
185
189
|
## Returning and Controlling Tweens
|
|
@@ -187,7 +191,7 @@ gsap.to(".item", { x: 100, ease: myEase, duration: 1 });
|
|
|
187
191
|
All tween methods return a **Tween** instance. Store the return value when controlling playback is needed:
|
|
188
192
|
|
|
189
193
|
```javascript
|
|
190
|
-
const tween = gsap.to(
|
|
194
|
+
const tween = gsap.to('.box', { x: 100, duration: 1, repeat: 1, yoyo: true });
|
|
191
195
|
tween.pause();
|
|
192
196
|
tween.play();
|
|
193
197
|
tween.reverse();
|
|
@@ -202,7 +206,7 @@ tween.totalTime(1.5);
|
|
|
202
206
|
Use a function for a `vars` value and it will get called **once for each target** the first time the tween renders, and whatever is returned by that function will be used as the animation value.
|
|
203
207
|
|
|
204
208
|
```javascript
|
|
205
|
-
gsap.to(
|
|
209
|
+
gsap.to('.item', {
|
|
206
210
|
x: (i, target, targetsArray) => i * 50, // first item animates to 0, the second to 50, the third to 100, etc.
|
|
207
211
|
stagger: 0.1,
|
|
208
212
|
});
|
|
@@ -213,7 +217,7 @@ gsap.to(".item", {
|
|
|
213
217
|
Use a `+=`, `-=`, `*=`, or `/=` prefix to indicate a **relative** value. For example, the following will animate x to 20 pixels less than whatever it is when the tween renders for the first time.
|
|
214
218
|
|
|
215
219
|
```javascript
|
|
216
|
-
gsap.to(
|
|
220
|
+
gsap.to('.class', { x: '-=20' });
|
|
217
221
|
```
|
|
218
222
|
|
|
219
223
|
`x: "+=20"` would add 20 to the current value. `"*=2"` would multiply by 2, and `"/=2"` would divide by 2.
|
|
@@ -223,7 +227,7 @@ gsap.to(".class", { x: "-=20" });
|
|
|
223
227
|
Set project-wide Tween defaults with **gsap.defaults()**:
|
|
224
228
|
|
|
225
229
|
```javascript
|
|
226
|
-
gsap.defaults({ duration: 0.6, ease:
|
|
230
|
+
gsap.defaults({ duration: 0.6, ease: 'power2.out' });
|
|
227
231
|
```
|
|
228
232
|
|
|
229
233
|
## Accessibility and responsive (gsap.matchMedia())
|
|
@@ -240,13 +244,13 @@ gsap.defaults({ duration: 0.6, ease: "power2.out" });
|
|
|
240
244
|
```javascript
|
|
241
245
|
mm.add(
|
|
242
246
|
{
|
|
243
|
-
isDesktop:
|
|
244
|
-
isMobile:
|
|
245
|
-
reduceMotion:
|
|
247
|
+
isDesktop: '(min-width: 800px)',
|
|
248
|
+
isMobile: '(max-width: 799px)',
|
|
249
|
+
reduceMotion: '(prefers-reduced-motion: reduce)',
|
|
246
250
|
},
|
|
247
|
-
|
|
251
|
+
context => {
|
|
248
252
|
const { isDesktop, reduceMotion } = context.conditions;
|
|
249
|
-
gsap.to(
|
|
253
|
+
gsap.to('.box', {
|
|
250
254
|
rotation: isDesktop ? 360 : 180,
|
|
251
255
|
duration: reduceMotion ? 0 : 2, // skip animation when user prefers reduced motion
|
|
252
256
|
});
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before using GSAP in Vue, Svelte, or non-React frameworks, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Lifecycle Initialization Rule (Section 175) → Create GSAP animations strictly inside `onMounted` / `onMount`; ban creating tweens in un-mounted setup phases
|
|
24
25
|
2. Scoped Selector Context (Section 176) → Scope selectors via `gsap.context(callback, containerRef)`; ban un-scoped global class selectors (`.item`)
|
|
25
26
|
3. Mandatory Context Reversion on Unmount (Section 177) → Call `ctx.revert()` inside `onUnmounted` / returned cleanup function to prevent memory leaks
|
|
@@ -43,9 +44,9 @@ Apply when writing or reviewing GSAP code in Vue (or Nuxt), Svelte (or SvelteKit
|
|
|
43
44
|
Use **onMounted** to run GSAP after the component is in the DOM. Use **onUnmounted** to clean up.
|
|
44
45
|
|
|
45
46
|
```javascript
|
|
46
|
-
import { onMounted, onUnmounted, ref } from
|
|
47
|
-
import { gsap } from
|
|
48
|
-
import { ScrollTrigger } from
|
|
47
|
+
import { onMounted, onUnmounted, ref } from 'vue';
|
|
48
|
+
import { gsap } from 'gsap';
|
|
49
|
+
import { ScrollTrigger } from 'gsap/ScrollTrigger';
|
|
49
50
|
gsap.registerPlugin(ScrollTrigger); // once per app, e.g. in main.js
|
|
50
51
|
|
|
51
52
|
export default {
|
|
@@ -56,8 +57,8 @@ export default {
|
|
|
56
57
|
onMounted(() => {
|
|
57
58
|
if (!container.value) return;
|
|
58
59
|
ctx = gsap.context(() => {
|
|
59
|
-
gsap.to(
|
|
60
|
-
gsap.from(
|
|
60
|
+
gsap.to('.box', { x: 100, duration: 0.6 });
|
|
61
|
+
gsap.from('.item', { autoAlpha: 0, y: 20, stagger: 0.1 });
|
|
61
62
|
}, container.value);
|
|
62
63
|
});
|
|
63
64
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before optimizing GSAP animations for performance, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Target properties (Section 18) → Animate Composite properties (`x`, `y`, `scale`, `rotation`, `opacity`) instead of layout properties (`left`, `top`, `width`, `height`)
|
|
24
25
|
2. Frequent Updates (Section 45) → Use `gsap.quickTo()` for mouse followers or rapid pointer movement loops
|
|
25
26
|
3. Batching & Staggering (Section 39) → Use GSAP `stagger` instead of creating multiple individual delayed tweens
|
|
@@ -62,10 +63,10 @@ GSAP batches updates internally. When mixing GSAP with direct DOM reads/writes o
|
|
|
62
63
|
Prefer **gsap.quickTo()** for properties that are updated often (e.g. mouse-follower x/y). It reuses a single tween instead of creating new tweens on each update.
|
|
63
64
|
|
|
64
65
|
```javascript
|
|
65
|
-
let xTo = gsap.quickTo(
|
|
66
|
-
yTo = gsap.quickTo(
|
|
66
|
+
let xTo = gsap.quickTo('#id', 'x', { duration: 0.4, ease: 'power3' }),
|
|
67
|
+
yTo = gsap.quickTo('#id', 'y', { duration: 0.4, ease: 'power3' });
|
|
67
68
|
|
|
68
|
-
document.querySelector(
|
|
69
|
+
document.querySelector('#container').addEventListener('mousemove', e => {
|
|
69
70
|
xTo(e.pageX);
|
|
70
71
|
yTo(e.pageY);
|
|
71
72
|
});
|