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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expo-router-v4
|
|
3
|
+
description: React Native 0.76+ New Architecture (Fabric/TurboModules), Expo Router v4 typed file-based navigation, native haptics, and biometrics.
|
|
4
|
+
tools: Read, Grep, Glob, Edit, Write
|
|
5
|
+
version: 3.0.0
|
|
6
|
+
last-updated: 2026-08-05
|
|
7
|
+
script: .agent/scripts/lint_runner.js
|
|
8
|
+
scripts-binding:
|
|
9
|
+
- .agent/scripts/lint_runner.js
|
|
10
|
+
skills:
|
|
11
|
+
- mobile-developer
|
|
12
|
+
- mobile-design
|
|
13
|
+
- react-specialist
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Expo Router v4 & React Native New Architecture
|
|
17
|
+
|
|
18
|
+
## Mandatory Pre-Flight Context Inspection
|
|
19
|
+
|
|
20
|
+
Before building mobile navigation or components:
|
|
21
|
+
|
|
22
|
+
1. New Architecture Enforcement → Enable Fabric renderer and TurboModules in `app.json` (`"newArchEnabled": true`)
|
|
23
|
+
2. Typed Routing → Use `expo-router` typed routes for safe navigation
|
|
24
|
+
3. Safe Area & Haptics → Wrap screens in `SafeAreaView` and provide subtle `expo-haptics` feedback
|
|
25
|
+
|
|
26
|
+
## Layout Navigation Architecture (`app/_layout.tsx`)
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Stack } from 'expo-router';
|
|
30
|
+
import { StatusBar } from 'expo-status-bar';
|
|
31
|
+
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
32
|
+
|
|
33
|
+
export default function RootLayout() {
|
|
34
|
+
return (
|
|
35
|
+
<SafeAreaProvider>
|
|
36
|
+
<StatusBar style="light" />
|
|
37
|
+
<Stack
|
|
38
|
+
screenOptions={{
|
|
39
|
+
headerStyle: { backgroundColor: '#0f172a' },
|
|
40
|
+
headerTintColor: '#f8fafc',
|
|
41
|
+
animation: 'slide_from_right',
|
|
42
|
+
}}
|
|
43
|
+
>
|
|
44
|
+
<Stack.Screen name="index" options={{ title: 'Feed' }} />
|
|
45
|
+
<Stack.Screen name="modal" options={{ presentation: 'modal' }} />
|
|
46
|
+
</Stack>
|
|
47
|
+
</SafeAreaProvider>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Native Haptic Touch Button Component
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import * as Haptics from 'expo-haptics';
|
|
56
|
+
import { Pressable, Text, PressableProps } from 'react-native';
|
|
57
|
+
|
|
58
|
+
interface TouchButtonProps extends PressableProps {
|
|
59
|
+
label: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function TouchButton({ label, onPress, ...props }: TouchButtonProps) {
|
|
63
|
+
return (
|
|
64
|
+
<Pressable
|
|
65
|
+
{...props}
|
|
66
|
+
onPress={e => {
|
|
67
|
+
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
|
68
|
+
onPress?.(e);
|
|
69
|
+
}}
|
|
70
|
+
className="px-5 py-3 bg-indigo-600 rounded-xl active:scale-95 transition-transform"
|
|
71
|
+
>
|
|
72
|
+
<Text className="text-white font-medium text-center">{label}</Text>
|
|
73
|
+
</Pressable>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 🛑 Verification-Before-Completion (VBC) Protocol
|
|
79
|
+
|
|
80
|
+
- Verify zero bridge warnings during navigation.
|
|
81
|
+
- Ensure safe area insets are respected across iOS notch and Android gesture bars.
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before extracting design systems or tokenizing CSS variables, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. 3+ Repetition Frequency Rule (Section 15) → Only tokenize values that recur 3+ times across components to prevent variable bloat
|
|
24
25
|
2. Semantic Naming Convention (Section 17) → Use functional/semantic names (`--color-primary`) rather than literal colors (`--red-500`)
|
|
25
26
|
3. Accessibility Token Contract (Section 110) → Ensure extracted text and surface tokens satisfy a min 4.5:1 WCAG AA contrast ratio
|
|
@@ -52,7 +53,7 @@ Tokens should be semantic, not literal. `color-brand` > `color-red`.
|
|
|
52
53
|
--surface-muted: 210, 40%, 96%;
|
|
53
54
|
|
|
54
55
|
/* Typography */
|
|
55
|
-
--font-sans:
|
|
56
|
+
--font-sans: 'Inter', system-ui, sans-serif;
|
|
56
57
|
|
|
57
58
|
/* Space / Geometry (8px grid scale) */
|
|
58
59
|
--space-1: 0.25rem; /* 4px */
|
|
@@ -90,26 +91,26 @@ If building a design system inside React/Next.js, standardize the system through
|
|
|
90
91
|
|
|
91
92
|
```typescript
|
|
92
93
|
// ✅ Efficient Extracted Component Architecture
|
|
93
|
-
import { cva } from
|
|
94
|
+
import { cva } from 'class-variance-authority';
|
|
94
95
|
|
|
95
96
|
const buttonStyles = cva(
|
|
96
|
-
|
|
97
|
+
'inline-flex items-center justify-center rounded-md font-medium transition-colors', // Base
|
|
97
98
|
{
|
|
98
99
|
variants: {
|
|
99
100
|
intent: {
|
|
100
|
-
primary:
|
|
101
|
-
destructive:
|
|
102
|
-
outline:
|
|
101
|
+
primary: 'bg-primary text-white hover:bg-primary/90',
|
|
102
|
+
destructive: 'bg-red-500 text-white hover:bg-red-600',
|
|
103
|
+
outline: 'border border-input hover:bg-accent',
|
|
103
104
|
},
|
|
104
105
|
size: {
|
|
105
|
-
sm:
|
|
106
|
-
default:
|
|
107
|
-
lg:
|
|
106
|
+
sm: 'h-9 px-3 text-sm',
|
|
107
|
+
default: 'h-10 px-4 py-2', // Extracted standard size
|
|
108
|
+
lg: 'h-11 px-8',
|
|
108
109
|
},
|
|
109
110
|
},
|
|
110
111
|
defaultVariants: {
|
|
111
|
-
intent:
|
|
112
|
-
size:
|
|
112
|
+
intent: 'primary',
|
|
113
|
+
size: 'default',
|
|
113
114
|
},
|
|
114
115
|
},
|
|
115
116
|
);
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before executing reasoning loops, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `package.json` / dependency manifests → Verify exact framework version boundaries (React 19 vs 18, Next.js 15 vs 14)
|
|
24
25
|
2. Epistemic Confidence Checklist (Section 1) → Categorize implementation confidence L1 to L5
|
|
25
26
|
3. High-Risk Hallucination Heatmap (Section 7) → Tag uncertain ORM/SDK method calls with `// VERIFY: [reason]` tags
|
|
@@ -52,6 +53,7 @@ CONFIDENCE CHECK:
|
|
|
52
53
|
### Epistemic Confidence Levels (L1-L5)
|
|
53
54
|
|
|
54
55
|
Rate the certainty of your implementation decisions using this hierarchy:
|
|
56
|
+
|
|
55
57
|
- **L1: Absolute Certainty (Verified Truth)**: Code is fully checked against active files in the workspace or verified in up-to-date documentation.
|
|
56
58
|
- **L2: High Confidence (Standard API)**: Using standard library or stable, unchanged language features (e.g. standard Node `fs` methods, basic Python functions).
|
|
57
59
|
- **L3: Moderate Confidence (Likely but Unverified)**: Custom utilities or package features that are likely correct but not actively verified. Must add `// VERIFY: [reason]` tags.
|
|
@@ -222,18 +224,21 @@ ALWAYS:
|
|
|
222
224
|
## 6. Fabel-5 Cognitive Boundaries (Wellbeing, Evenhandedness, Memory)
|
|
223
225
|
|
|
224
226
|
### User Wellbeing & Safety
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
|
|
228
|
+
- **No Psychoanalysis / Diagnosis**: Reflect what is said without diagnosing or assigning psychological narratives (e.g. "you restrict because of trauma"). Suggest professional help without clinical labels.
|
|
229
|
+
- **Self-Harm Interruptions**: Never suggest physical substitutes (holding ice, snapping rubber bands, drawing lines) or mimic self-harm. They reinforce the self-harm loop.
|
|
230
|
+
- **No Over-reliance**: Do not thank the user for reaching out, encourage them to stay, or reiterate willingness to continue. Avoid conversational dependencies.
|
|
231
|
+
- **Positive Paths**: Acknowledge distress without reflective listening that amplifies negative spirals. Keep paths to external help open.
|
|
229
232
|
|
|
230
233
|
### Moral & Political Evenhandedness
|
|
231
|
-
|
|
232
|
-
|
|
234
|
+
|
|
235
|
+
- **Nuance Over Brevity**: Reject requests for simple yes/no or one-word answers on contested political, ethical, or policy issues. Give a fair, balanced overview of existing positions.
|
|
236
|
+
- **Opposing Perspectives**: Conclude arguments for positions by presenting opposing viewpoints or empirical disputes even if the user/AI agrees with the primary view.
|
|
233
237
|
|
|
234
238
|
### Memory & Preference Boundaries
|
|
235
|
-
|
|
236
|
-
|
|
239
|
+
|
|
240
|
+
- **Invisible Integration**: Integrate remembered user context silently without attribution or observation verbs ("I notice in your profile...", "Based on your memory...").
|
|
241
|
+
- **Expertise Tuning**: Match language and technical depth to the user's stated background without lecturing.
|
|
237
242
|
|
|
238
243
|
---
|
|
239
244
|
|
|
@@ -241,15 +246,15 @@ ALWAYS:
|
|
|
241
246
|
|
|
242
247
|
High-risk hallucination zones (verify before using):
|
|
243
248
|
|
|
244
|
-
| Category
|
|
245
|
-
|
|
246
|
-
| **Prisma ORM**
|
|
247
|
-
| **React 19**
|
|
248
|
-
| **Next.js 15**
|
|
249
|
-
| **OpenAI SDK**
|
|
250
|
-
| **Anthropic SDK** | `claude-4-opus`, `temperature: "low"`
|
|
251
|
-
| **Node.js**
|
|
252
|
-
| **Python**
|
|
249
|
+
| Category | Common Hallucinations | Why |
|
|
250
|
+
| ----------------- | ------------------------------------------------- | -------------------------- |
|
|
251
|
+
| **Prisma ORM** | `findOne()`, `updateMany({where:{id}})` | Renamed/misused methods |
|
|
252
|
+
| **React 19** | `useFormState()`, `useServerComponent()` | Renamed or never existed |
|
|
253
|
+
| **Next.js 15** | `headers()` without await, `notFound()` in client | Breaking changes |
|
|
254
|
+
| **OpenAI SDK** | `response.text`, `chat.stream()`, `gpt-5` | Wrong properties/methods |
|
|
255
|
+
| **Anthropic SDK** | `claude-4-opus`, `temperature: "low"` | Wrong model strings/types |
|
|
256
|
+
| **Node.js** | `fs.readAsync()`, `fetch()` below Node 18 | Methods that don't exist |
|
|
257
|
+
| **Python** | `list.findIndex()`, `dict.filter()` | JS methods on Python types |
|
|
253
258
|
|
|
254
259
|
When in doubt: **search the official docs**. Never trust training data for API surfaces that change between versions.
|
|
255
260
|
|
|
@@ -279,10 +284,12 @@ Before finalizing any response, ask yourself:
|
|
|
279
284
|
---
|
|
280
285
|
|
|
281
286
|
## Pre-Flight Checklist
|
|
287
|
+
|
|
282
288
|
- [ ] Have I reviewed the Fabel epistemic confidence guidelines before starting?
|
|
283
289
|
- [ ] Have I checked the framework version context in the workspace?
|
|
284
290
|
|
|
285
291
|
## VBC Protocol
|
|
292
|
+
|
|
286
293
|
- [ ] Verify that any APIs or files to be updated are loaded and checked for stale context prior to execution.
|
|
287
294
|
|
|
288
295
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before remediating HTML accessibility defects, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Priority Matrix (Section 22) → Ensure accessible names on icon buttons (P1) and native HTML keyboard controls (P2) before styling
|
|
24
25
|
2. Focus Ring Policy (Section 29) → Ban `outline: none` without providing explicit `:focus-visible` replacement (`2px` ring + offset)
|
|
25
26
|
3. Form Error Association (Section 32) → Attach `aria-invalid="true"` and `aria-describedby` pointing to error text IDs
|
|
@@ -30,21 +31,22 @@ Guidelines for detecting, prioritizing, and fixing accessibility defects across
|
|
|
30
31
|
|
|
31
32
|
## 1. Priority Priority Matrix (WCAG 2.2 AA)
|
|
32
33
|
|
|
33
|
-
| Priority | Category
|
|
34
|
-
|
|
|
35
|
-
| **P1**
|
|
36
|
-
| **P2**
|
|
37
|
-
| **P3**
|
|
38
|
-
| **P4**
|
|
39
|
-
| **P5**
|
|
40
|
-
| **P6**
|
|
41
|
-
| **P7**
|
|
34
|
+
| Priority | Category | Critical Requirements |
|
|
35
|
+
| -------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
36
|
+
| **P1** | **Accessible Names** | Every icon button MUST have `aria-label` or `aria-labelledby`. Decorative icons MUST have `aria-hidden="true"`. |
|
|
37
|
+
| **P2** | **Keyboard Access** | All interactive controls MUST be reachable and operable via `Tab` / `Shift+Tab`, `Space`, `Enter`. NEVER use `<div>` or `<span>` as clickable elements without `role="button"`, `tabIndex={0}`, and key handlers. |
|
|
38
|
+
| **P3** | **Focus & Dialogs (SC 2.4.11)** | Modals/Dialogs MUST trap focus within the dialog container while open, return focus on close, dismiss on `Escape`, and ensure focused items are **never fully obscured by sticky headers/footers**. |
|
|
39
|
+
| **P4** | **Focus Appearance (SC 2.4.13)** | Focus indicators MUST be clearly visible (`:focus-visible`), achieve at least **3:1 contrast** against adjacent background, and have a min **2px thickness**. |
|
|
40
|
+
| **P5** | **Target Size (SC 2.5.8)** | Interactive controls MUST measure at least **24x24 CSS pixels** (min **44x44px** recommended for mobile touch targets) or have sufficient non-intersecting spacing. |
|
|
41
|
+
| **P6** | **Color & Contrast** | Text MUST satisfy WCAG AA 4.5:1 ratio (3.0:1 for large text). Color alone MUST NOT be the only indicator of state or error. |
|
|
42
|
+
| **P7** | **Form Validation** | Inputs MUST have explicit `<label>` or `aria-labelledby`. Errors MUST use `aria-invalid="true"` and `aria-describedby` pointing to error text. |
|
|
42
43
|
|
|
43
44
|
---
|
|
44
45
|
|
|
45
46
|
## 2. Accessible Code Patterns
|
|
46
47
|
|
|
47
48
|
### Icon-Only Button
|
|
49
|
+
|
|
48
50
|
```tsx
|
|
49
51
|
// ✅ SAFE & ACCESSIBLE
|
|
50
52
|
<button
|
|
@@ -58,6 +60,7 @@ Guidelines for detecting, prioritizing, and fixing accessibility defects across
|
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
### Accessible Modal Dialog Focus Trap
|
|
63
|
+
|
|
61
64
|
```tsx
|
|
62
65
|
// ✅ SAFE & ACCESSIBLE
|
|
63
66
|
<div
|
|
@@ -68,8 +71,12 @@ Guidelines for detecting, prioritizing, and fixing accessibility defects across
|
|
|
68
71
|
className="fixed inset-0 z-50 flex items-center justify-center bg-black/50"
|
|
69
72
|
>
|
|
70
73
|
<div className="bg-surface p-6 rounded-xl max-w-md w-full">
|
|
71
|
-
<h2 id="dialog-title" className="text-xl font-bold">
|
|
72
|
-
|
|
74
|
+
<h2 id="dialog-title" className="text-xl font-bold">
|
|
75
|
+
Confirm Deletion
|
|
76
|
+
</h2>
|
|
77
|
+
<p id="dialog-description" className="text-muted mt-2">
|
|
78
|
+
This action cannot be undone.
|
|
79
|
+
</p>
|
|
73
80
|
{/* Actions */}
|
|
74
81
|
</div>
|
|
75
82
|
</div>
|
|
@@ -79,11 +86,11 @@ Guidelines for detecting, prioritizing, and fixing accessibility defects across
|
|
|
79
86
|
|
|
80
87
|
## Anti-Slop Table
|
|
81
88
|
|
|
82
|
-
| Violation
|
|
83
|
-
|
|
|
84
|
-
| `<div onClick={submit}>Submit</div>` | `<button type="button" onClick={submit}>Submit</button>`
|
|
85
|
-
| `<button><TrashIcon /></button>`
|
|
86
|
-
| `outline: none` in CSS
|
|
89
|
+
| Violation | Accessible Fix | Impact |
|
|
90
|
+
| ------------------------------------ | ---------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
91
|
+
| `<div onClick={submit}>Submit</div>` | `<button type="button" onClick={submit}>Submit</button>` | Fixes screen reader announcement & keyboard trigger |
|
|
92
|
+
| `<button><TrashIcon /></button>` | `<button aria-label="Delete item"><TrashIcon aria-hidden="true" /></button>` | Gives screen reader clear accessible name |
|
|
93
|
+
| `outline: none` in CSS | `:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }` | Restores visible keyboard focus indicator |
|
|
87
94
|
|
|
88
95
|
---
|
|
89
96
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before engineering metadata or Open Graph tags, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Title & Meta Description Caps (Section 24) → Restrict title tags to 50–60 chars and meta descriptions to 140–155 chars
|
|
24
25
|
2. Absolute Image URL Rule (Section 74) → Enforce full absolute HTTPS URLs (`https://domain.com/og.jpg`) for `og:image` and `twitter:image`
|
|
25
26
|
3. Twitter Card Type (Section 39) → Always specify `<meta name="twitter:card" content="summary_large_image" />` for prominent social previews
|
|
@@ -31,15 +32,20 @@ Audit, generate, and fix page metadata for rich social previews, search engine i
|
|
|
31
32
|
## 4 Metadata Standard Requirements
|
|
32
33
|
|
|
33
34
|
### 1. Title & Meta Description Length & Formatting
|
|
34
|
-
|
|
35
|
+
|
|
36
|
+
- **Title Tag**: 50–60 characters max (_"Product Title | Brand Name"_).
|
|
35
37
|
- **Meta Description**: 140–155 characters max. Must contain active call to value without truncating on search result cards.
|
|
36
38
|
|
|
37
39
|
### 2. Open Graph & Twitter Card Matrix
|
|
40
|
+
|
|
38
41
|
```html
|
|
39
42
|
<!-- Open Graph / Facebook / LinkedIn -->
|
|
40
43
|
<meta property="og:type" content="website" />
|
|
41
44
|
<meta property="og:title" content="UI Skills for Design Engineers" />
|
|
42
|
-
<meta
|
|
45
|
+
<meta
|
|
46
|
+
property="og:description"
|
|
47
|
+
content="A curated collection of design-engineering skills for accessibility, motion, and frontend craft."
|
|
48
|
+
/>
|
|
43
49
|
<meta property="og:image" content="https://example.com/og-image.jpg" />
|
|
44
50
|
<meta property="og:image:width" content="1200" />
|
|
45
51
|
<meta property="og:image:height" content="630" />
|
|
@@ -47,32 +53,37 @@ Audit, generate, and fix page metadata for rich social previews, search engine i
|
|
|
47
53
|
<!-- Twitter / X -->
|
|
48
54
|
<meta name="twitter:card" content="summary_large_image" />
|
|
49
55
|
<meta name="twitter:title" content="UI Skills for Design Engineers" />
|
|
50
|
-
<meta
|
|
56
|
+
<meta
|
|
57
|
+
name="twitter:description"
|
|
58
|
+
content="A curated collection of design-engineering skills for accessibility, motion, and frontend craft."
|
|
59
|
+
/>
|
|
51
60
|
<meta name="twitter:image" content="https://example.com/twitter-image.jpg" />
|
|
52
61
|
```
|
|
53
62
|
|
|
54
63
|
### 3. Canonical Tag Verification
|
|
64
|
+
|
|
55
65
|
```html
|
|
56
66
|
<link rel="canonical" href="https://example.com/current-page-path" />
|
|
57
67
|
```
|
|
58
68
|
|
|
59
69
|
### 4. Next.js App Router Metadata Export Example
|
|
70
|
+
|
|
60
71
|
```typescript
|
|
61
|
-
import type { Metadata } from
|
|
72
|
+
import type { Metadata } from 'next';
|
|
62
73
|
|
|
63
74
|
export const metadata: Metadata = {
|
|
64
|
-
title:
|
|
65
|
-
description:
|
|
75
|
+
title: 'UI Skills for Design Engineers',
|
|
76
|
+
description: 'Curated design-engineering skills for accessibility, motion, and frontend craft.',
|
|
66
77
|
openGraph: {
|
|
67
|
-
title:
|
|
68
|
-
description:
|
|
69
|
-
url:
|
|
70
|
-
images: [{ url:
|
|
78
|
+
title: 'UI Skills for Design Engineers',
|
|
79
|
+
description: 'Curated design-engineering skills for accessibility, motion, and frontend craft.',
|
|
80
|
+
url: 'https://example.com',
|
|
81
|
+
images: [{ url: 'https://example.com/og.jpg', width: 1200, height: 630 }],
|
|
71
82
|
},
|
|
72
83
|
twitter: {
|
|
73
|
-
card:
|
|
74
|
-
title:
|
|
75
|
-
images: [
|
|
84
|
+
card: 'summary_large_image',
|
|
85
|
+
title: 'UI Skills for Design Engineers',
|
|
86
|
+
images: ['https://example.com/twitter.jpg'],
|
|
76
87
|
},
|
|
77
88
|
};
|
|
78
89
|
```
|
|
@@ -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
|