tribunal-kit 6.0.0 → 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/.manifest.json +78 -0
- package/.agent/ARCHITECTURE.md +19 -241
- 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 +3716 -1
- package/.agent/history/memory/MEMORY.md +246 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2034 -263
- package/.agent/rules/GEMINI.md +12 -10
- 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 +237 -0
- 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 +80 -0
- package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
- 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 +70 -0
- 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 +59 -0
- package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
- 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 +81 -0
- 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 +59 -0
- 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 +68 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
- 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 +58 -0
- 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 +78 -0
- 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 +90 -0
- 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 +15 -14
- 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 +160 -88
- package/SECURITY.md +11 -11
- package/bin/mcp-server.js +512 -233
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +45 -48
- package/dist/cli.js +26 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/memory.js +3 -2
- package/dist/commands/native.js +36 -0
- package/dist/commands/status.js +6 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/index.d.ts +58 -3
- package/package.json +20 -16
- 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 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
|
});
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before invoking GSAP plugins, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `package.json` → Verify plugin installation and check for Club GSAP licensing requirements (`MorphSVG`, `SplitText`, `ScrollSmoother`)
|
|
24
25
|
2. Plugin Registration (Section 18) → Always register plugins explicitly via `gsap.registerPlugin(...)` at module root
|
|
25
26
|
3. Revert & Cleanup (Section 418) → Call `.revert()` on SplitText and Flip instances during component unmount
|
|
@@ -35,10 +36,10 @@ Apply when using or reviewing code that uses GSAP plugins: registering plugins,
|
|
|
35
36
|
Register each plugin once so GSAP (and bundlers) know to include it. Use **gsap.registerPlugin()** with every plugin used in the project:
|
|
36
37
|
|
|
37
38
|
```javascript
|
|
38
|
-
import gsap from
|
|
39
|
-
import { ScrollToPlugin } from
|
|
40
|
-
import { Flip } from
|
|
41
|
-
import { Draggable } from
|
|
39
|
+
import gsap from 'gsap';
|
|
40
|
+
import { ScrollToPlugin } from 'gsap/ScrollToPlugin';
|
|
41
|
+
import { Flip } from 'gsap/Flip';
|
|
42
|
+
import { Draggable } from 'gsap/Draggable';
|
|
42
43
|
|
|
43
44
|
gsap.registerPlugin(ScrollToPlugin, Flip, Draggable);
|
|
44
45
|
```
|
|
@@ -56,8 +57,8 @@ Animates scroll position (window or a scrollable element). Use for “scroll to
|
|
|
56
57
|
gsap.registerPlugin(ScrollToPlugin);
|
|
57
58
|
|
|
58
59
|
gsap.to(window, { duration: 1, scrollTo: { y: 500 } });
|
|
59
|
-
gsap.to(window, { duration: 1, scrollTo: { y:
|
|
60
|
-
gsap.to(scrollContainer, { duration: 1, scrollTo: { x:
|
|
60
|
+
gsap.to(window, { duration: 1, scrollTo: { y: '#section', offsetY: 50 } });
|
|
61
|
+
gsap.to(scrollContainer, { duration: 1, scrollTo: { x: 'max' } });
|
|
61
62
|
```
|
|
62
63
|
|
|
63
64
|
**ScrollToPlugin — key config (scrollTo object):**
|
|
@@ -92,9 +93,9 @@ Capture state with `Flip.getState()`, then apply changes (e.g. layout or class c
|
|
|
92
93
|
```javascript
|
|
93
94
|
gsap.registerPlugin(Flip);
|
|
94
95
|
|
|
95
|
-
const state = Flip.getState(
|
|
96
|
+
const state = Flip.getState('.item');
|
|
96
97
|
// change DOM (reorder, add/remove, change classes)
|
|
97
|
-
Flip.from(state, { duration: 0.5, ease:
|
|
98
|
+
Flip.from(state, { duration: 0.5, ease: 'power2.inOut' });
|
|
98
99
|
```
|
|
99
100
|
|
|
100
101
|
**Flip — key config (Flip.from vars):**
|
|
@@ -118,8 +119,8 @@ Makes elements draggable, spinnable, or throwable with mouse/touch. Use for slid
|
|
|
118
119
|
```javascript
|
|
119
120
|
gsap.registerPlugin(Draggable, InertiaPlugin);
|
|
120
121
|
|
|
121
|
-
Draggable.create(
|
|
122
|
-
Draggable.create(
|
|
122
|
+
Draggable.create('.box', { type: 'x,y', bounds: '#container', inertia: true });
|
|
123
|
+
Draggable.create('.knob', { type: 'rotation' });
|
|
123
124
|
```
|
|
124
125
|
|
|
125
126
|
**Draggable — key config options:**
|
|
@@ -140,19 +141,19 @@ Works with Draggable for momentum after release, or track the inertia/velocity o
|
|
|
140
141
|
|
|
141
142
|
```javascript
|
|
142
143
|
gsap.registerPlugin(Draggable, InertiaPlugin);
|
|
143
|
-
Draggable.create(
|
|
144
|
+
Draggable.create('.box', { type: 'x,y', inertia: true });
|
|
144
145
|
```
|
|
145
146
|
|
|
146
147
|
Or track velocity of a property:
|
|
147
148
|
|
|
148
149
|
```javascript
|
|
149
|
-
InertiaPlugin.track(
|
|
150
|
+
InertiaPlugin.track('.box', 'x');
|
|
150
151
|
```
|
|
151
152
|
|
|
152
153
|
Then use `"auto"` to continue the current velocity and glide to a stop:
|
|
153
154
|
|
|
154
155
|
```javascript
|
|
155
|
-
gsap.to(obj, { inertia: { x:
|
|
156
|
+
gsap.to(obj, { inertia: { x: 'auto' } });
|
|
156
157
|
```
|
|
157
158
|
|
|
158
159
|
### Observer
|
|
@@ -163,7 +164,7 @@ Normalizes pointer and scroll input across devices. Use for swipe, scroll direct
|
|
|
163
164
|
gsap.registerPlugin(Observer);
|
|
164
165
|
|
|
165
166
|
Observer.create({
|
|
166
|
-
target:
|
|
167
|
+
target: '#area',
|
|
167
168
|
onUp: () => {},
|
|
168
169
|
onDown: () => {},
|
|
169
170
|
onLeft: () => {},
|
|
@@ -190,7 +191,7 @@ Splits an element’s text into characters, words, and/or lines (each in its own
|
|
|
190
191
|
```javascript
|
|
191
192
|
gsap.registerPlugin(SplitText);
|
|
192
193
|
|
|
193
|
-
const split = SplitText.create(
|
|
194
|
+
const split = SplitText.create('.heading', { type: 'words, chars' });
|
|
194
195
|
gsap.from(split.chars, { opacity: 0, y: 20, stagger: 0.03, duration: 0.4 });
|
|
195
196
|
// later: split.revert() or let gsap.context() cleanup revert
|
|
196
197
|
```
|
|
@@ -198,8 +199,8 @@ gsap.from(split.chars, { opacity: 0, y: 20, stagger: 0.03, duration: 0.4 });
|
|
|
198
199
|
With **onSplit()** (v3.13.0+), animations run on each split and on re-split when **autoSplit** is used; returning a tween/timeline from **onSplit()** lets SplitText clean up and sync progress on re-split:
|
|
199
200
|
|
|
200
201
|
```javascript
|
|
201
|
-
SplitText.create(
|
|
202
|
-
type:
|
|
202
|
+
SplitText.create('.split', {
|
|
203
|
+
type: 'lines',
|
|
203
204
|
autoSplit: true,
|
|
204
205
|
onSplit(self) {
|
|
205
206
|
return gsap.from(self.lines, { y: 100, opacity: 0, stagger: 0.05, duration: 0.5 });
|
|
@@ -238,9 +239,9 @@ Animates text with a scramble/glitch effect. Use when revealing or transitioning
|
|
|
238
239
|
```javascript
|
|
239
240
|
gsap.registerPlugin(ScrambleTextPlugin);
|
|
240
241
|
|
|
241
|
-
gsap.to(
|
|
242
|
+
gsap.to('.text', {
|
|
242
243
|
duration: 1,
|
|
243
|
-
scrambleText: { text:
|
|
244
|
+
scrambleText: { text: 'New message', chars: '01', revealDelay: 0.5 },
|
|
244
245
|
});
|
|
245
246
|
```
|
|
246
247
|
|
|
@@ -258,11 +259,11 @@ Reveals or hides the stroke of SVG elements by animating `stroke-dashoffset` / `
|
|
|
258
259
|
gsap.registerPlugin(DrawSVGPlugin);
|
|
259
260
|
|
|
260
261
|
// draw from nothing to full stroke
|
|
261
|
-
gsap.from(
|
|
262
|
+
gsap.from('#path', { duration: 1, drawSVG: 0 });
|
|
262
263
|
// or explicit segment: from 0–0 to 0–100%
|
|
263
|
-
gsap.fromTo(
|
|
264
|
+
gsap.fromTo('#path', { drawSVG: '0% 0%' }, { drawSVG: '0% 100%', duration: 1 });
|
|
264
265
|
// stroke only in the middle (gaps at ends)
|
|
265
|
-
gsap.to(
|
|
266
|
+
gsap.to('#path', { duration: 1, drawSVG: '20% 80%' });
|
|
266
267
|
```
|
|
267
268
|
|
|
268
269
|
**Caveats:** Only affects stroke (not fill). Prefer single-segment `<path>` elements; multi-segment paths can render oddly in some browsers. Contents of `<use>` cannot be visually changed. **DrawSVGPlugin.getLength(element)** and **DrawSVGPlugin.getPosition(element)** return stroke length and current position.
|
|
@@ -279,13 +280,13 @@ Morphs one SVG shape into another by animating the `d` attribute (path data). St
|
|
|
279
280
|
gsap.registerPlugin(MorphSVGPlugin);
|
|
280
281
|
|
|
281
282
|
// convert primitives to path first if needed:
|
|
282
|
-
MorphSVGPlugin.convertToPath(
|
|
283
|
+
MorphSVGPlugin.convertToPath('circle, rect, ellipse, line');
|
|
283
284
|
|
|
284
|
-
gsap.to(
|
|
285
|
+
gsap.to('#diamond', { duration: 1, morphSVG: '#lightning', ease: 'power2.inOut' });
|
|
285
286
|
// object form:
|
|
286
|
-
gsap.to(
|
|
287
|
+
gsap.to('#diamond', {
|
|
287
288
|
duration: 1,
|
|
288
|
-
morphSVG: { shape:
|
|
289
|
+
morphSVG: { shape: '#lightning', type: 'rotational', shapeIndex: 2 },
|
|
289
290
|
});
|
|
290
291
|
```
|
|
291
292
|
|
|
@@ -318,9 +319,9 @@ Animates an element along an SVG path. Use when moving an object along a path (e
|
|
|
318
319
|
```javascript
|
|
319
320
|
gsap.registerPlugin(MotionPathPlugin);
|
|
320
321
|
|
|
321
|
-
gsap.to(
|
|
322
|
+
gsap.to('.dot', {
|
|
322
323
|
duration: 2,
|
|
323
|
-
motionPath: { path:
|
|
324
|
+
motionPath: { path: '#path', align: '#path', alignOrigin: [0.5, 0.5] },
|
|
324
325
|
});
|
|
325
326
|
```
|
|
326
327
|
|
|
@@ -341,7 +342,7 @@ Visual editor for MotionPath (alignment, offset). Use during development to tune
|
|
|
341
342
|
```javascript
|
|
342
343
|
gsap.registerPlugin(MotionPathPlugin, MotionPathHelperPlugin);
|
|
343
344
|
|
|
344
|
-
const helper = MotionPathHelper.create(
|
|
345
|
+
const helper = MotionPathHelper.create('.dot', '#path', { end: 0.5 });
|
|
345
346
|
// adjust in UI, then use helper.path or helper.getProgress() in your animation
|
|
346
347
|
```
|
|
347
348
|
|
|
@@ -353,8 +354,8 @@ Custom easing curves (cubic-bezier or SVG path). Use when a built-in ease is not
|
|
|
353
354
|
|
|
354
355
|
```javascript
|
|
355
356
|
gsap.registerPlugin(CustomEase);
|
|
356
|
-
const ease = CustomEase.create(
|
|
357
|
-
gsap.to(
|
|
357
|
+
const ease = CustomEase.create('name', '.17,.67,.83,.67');
|
|
358
|
+
gsap.to('.el', { x: 100, ease: ease, duration: 1 });
|
|
358
359
|
```
|
|
359
360
|
|
|
360
361
|
### EasePack
|
|
@@ -378,7 +379,7 @@ Bounce-style easing with configurable strength.
|
|
|
378
379
|
```javascript
|
|
379
380
|
gsap.registerPlugin(Physics2DPlugin);
|
|
380
381
|
|
|
381
|
-
gsap.to(
|
|
382
|
+
gsap.to('.ball', {
|
|
382
383
|
duration: 2,
|
|
383
384
|
physics2D: {
|
|
384
385
|
velocity: 250,
|
|
@@ -395,7 +396,7 @@ Applies physics to property values. Use for physics-driven property animation.
|
|
|
395
396
|
```javascript
|
|
396
397
|
gsap.registerPlugin(PhysicsPropsPlugin);
|
|
397
398
|
|
|
398
|
-
gsap.to(
|
|
399
|
+
gsap.to('.obj', {
|
|
399
400
|
duration: 2,
|
|
400
401
|
physicsProps: {
|
|
401
402
|
x: { velocity: 100, end: 300 },
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before writing GSAP animation logic in React, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `package.json` → Verify `@gsap/react` and `gsap` dependencies
|
|
24
25
|
2. `useGSAP()` Hook setup (Section 27) → Pass `{ scope: containerRef }` so selectors target DOM nodes within component scope
|
|
25
26
|
3. Cleanup & Context-Safe Callbacks (Section 89) → Use `contextSafe` for event handlers attached after component mount to prevent memory leaks
|
|
@@ -44,7 +45,7 @@ npm install @gsap/react
|
|
|
44
45
|
When **@gsap/react** is available, use the **useGSAP()** hook instead of `useEffect()` for GSAP setup. It handles cleanup automatically and provides a scope and **contextSafe** for callbacks.
|
|
45
46
|
|
|
46
47
|
```javascript
|
|
47
|
-
import { useGSAP } from
|
|
48
|
+
import { useGSAP } from '@gsap/react';
|
|
48
49
|
|
|
49
50
|
gsap.registerPlugin(useGSAP); // register before running useGSAP or any GSAP code
|
|
50
51
|
|
|
@@ -52,8 +53,8 @@ const containerRef = useRef(null);
|
|
|
52
53
|
|
|
53
54
|
useGSAP(
|
|
54
55
|
() => {
|
|
55
|
-
gsap.to(
|
|
56
|
-
gsap.from(
|
|
56
|
+
gsap.to('.box', { x: 100 });
|
|
57
|
+
gsap.from('.item', { opacity: 0, stagger: 0.1 });
|
|
57
58
|
},
|
|
58
59
|
{ scope: containerRef },
|
|
59
60
|
);
|
|
@@ -91,8 +92,8 @@ It's okay to use **gsap.context()** inside a regular **useEffect()** when @gsap/
|
|
|
91
92
|
```javascript
|
|
92
93
|
useEffect(() => {
|
|
93
94
|
const ctx = gsap.context(() => {
|
|
94
|
-
gsap.to(
|
|
95
|
-
gsap.from(
|
|
95
|
+
gsap.to('.box', { x: 100 });
|
|
96
|
+
gsap.from('.item', { opacity: 0, stagger: 0.1 });
|
|
96
97
|
}, containerRef);
|
|
97
98
|
return () => ctx.revert();
|
|
98
99
|
}, []);
|
|
@@ -116,7 +117,7 @@ useGSAP(
|
|
|
116
117
|
gsap.to(goodRef.current, { x: 100 });
|
|
117
118
|
|
|
118
119
|
// ❌ DANGER! This animation is created in an event handler that executes AFTER useGSAP() executes. It's not added to the context so it won't get cleaned up (reverted). The event listener isn't removed in cleanup function below either, so it persists between component renders (bad).
|
|
119
|
-
badRef.current.addEventListener(
|
|
120
|
+
badRef.current.addEventListener('click', () => {
|
|
120
121
|
gsap.to(badRef.current, { y: 100 });
|
|
121
122
|
});
|
|
122
123
|
|
|
@@ -125,12 +126,12 @@ useGSAP(
|
|
|
125
126
|
gsap.to(goodRef.current, { rotation: 180 });
|
|
126
127
|
});
|
|
127
128
|
|
|
128
|
-
goodRef.current.addEventListener(
|
|
129
|
+
goodRef.current.addEventListener('click', onClickGood);
|
|
129
130
|
|
|
130
131
|
// 👍 we remove the event listener in the cleanup function below.
|
|
131
132
|
return () => {
|
|
132
133
|
// <-- cleanup
|
|
133
|
-
goodRef.current.removeEventListener(
|
|
134
|
+
goodRef.current.removeEventListener('click', onClickGood);
|
|
134
135
|
};
|
|
135
136
|
},
|
|
136
137
|
{ scope: container },
|