@rune-kit/rune 2.8.0 → 2.11.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/LICENSE +21 -21
- package/README.md +68 -34
- package/agents/adversary.md +27 -0
- package/agents/architect.md +19 -29
- package/agents/asset-creator.md +18 -4
- package/agents/audit.md +25 -4
- package/agents/autopsy.md +19 -4
- package/agents/ba.md +35 -0
- package/agents/brainstorm.md +31 -4
- package/agents/browser-pilot.md +21 -4
- package/agents/coder.md +21 -29
- package/agents/completion-gate.md +20 -4
- package/agents/constraint-check.md +18 -4
- package/agents/context-engine.md +22 -4
- package/agents/context-pack.md +32 -0
- package/agents/cook.md +41 -4
- package/agents/db.md +19 -4
- package/agents/debug.md +33 -4
- package/agents/dependency-doctor.md +20 -4
- package/agents/deploy.md +27 -4
- package/agents/design.md +22 -4
- package/agents/doc-processor.md +27 -0
- package/agents/docs-seeker.md +19 -4
- package/agents/docs.md +31 -0
- package/agents/fix.md +37 -4
- package/agents/git.md +29 -0
- package/agents/hallucination-guard.md +20 -4
- package/agents/incident.md +21 -4
- package/agents/integrity-check.md +18 -4
- package/agents/journal.md +19 -4
- package/agents/launch.md +32 -4
- package/agents/logic-guardian.md +26 -11
- package/agents/marketing.md +23 -4
- package/agents/mcp-builder.md +26 -0
- package/agents/neural-memory.md +30 -0
- package/agents/onboard.md +22 -4
- package/agents/perf.md +21 -4
- package/agents/plan.md +29 -4
- package/agents/preflight.md +22 -4
- package/agents/problem-solver.md +20 -4
- package/agents/rescue.md +23 -4
- package/agents/research.md +19 -4
- package/agents/researcher.md +19 -29
- package/agents/retro.md +32 -0
- package/agents/review-intake.md +20 -4
- package/agents/review.md +32 -4
- package/agents/reviewer.md +20 -28
- package/agents/safeguard.md +19 -4
- package/agents/sast.md +18 -4
- package/agents/scaffold.md +41 -0
- package/agents/scanner.md +19 -28
- package/agents/scope-guard.md +18 -4
- package/agents/scout.md +23 -4
- package/agents/sentinel-env.md +26 -0
- package/agents/sentinel.md +33 -4
- package/agents/sequential-thinking.md +20 -4
- package/agents/session-bridge.md +24 -4
- package/agents/skill-forge.md +22 -4
- package/agents/skill-router.md +26 -4
- package/agents/slides.md +24 -0
- package/agents/surgeon.md +19 -4
- package/agents/team.md +30 -4
- package/agents/test.md +36 -4
- package/agents/trend-scout.md +17 -4
- package/agents/verification.md +20 -4
- package/agents/video-creator.md +20 -4
- package/agents/watchdog.md +19 -4
- package/agents/worktree.md +17 -4
- package/commands/rune.md +168 -168
- package/compiler/__tests__/analytics.test.js +370 -0
- package/compiler/adapters/openclaw.js +2 -2
- package/compiler/analytics.js +385 -0
- package/compiler/bin/rune.js +68 -2
- package/compiler/dashboard.js +883 -0
- package/compiler/transforms/branding.js +1 -1
- package/contexts/dev.md +34 -34
- package/contexts/research.md +43 -43
- package/contexts/review.md +55 -55
- package/extensions/ai-ml/PACK.md +88 -88
- package/extensions/ai-ml/skills/ai-agents.md +172 -172
- package/extensions/ai-ml/skills/code-sandbox.md +187 -187
- package/extensions/ai-ml/skills/deep-research.md +146 -146
- package/extensions/ai-ml/skills/embedding-search.md +66 -66
- package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
- package/extensions/ai-ml/skills/llm-architect.md +125 -125
- package/extensions/ai-ml/skills/llm-integration.md +64 -64
- package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
- package/extensions/ai-ml/skills/rag-patterns.md +66 -66
- package/extensions/ai-ml/skills/web-extraction.md +114 -114
- package/extensions/analytics/PACK.md +92 -92
- package/extensions/analytics/skills/ab-testing.md +72 -72
- package/extensions/analytics/skills/dashboard-patterns.md +83 -83
- package/extensions/analytics/skills/data-validation.md +68 -68
- package/extensions/analytics/skills/funnel-analysis.md +81 -81
- package/extensions/analytics/skills/sql-patterns.md +57 -57
- package/extensions/analytics/skills/statistical-analysis.md +79 -79
- package/extensions/analytics/skills/tracking-setup.md +71 -71
- package/extensions/backend/PACK.md +104 -104
- package/extensions/backend/skills/api-patterns.md +84 -84
- package/extensions/backend/skills/async-pipeline.md +193 -193
- package/extensions/backend/skills/auth-patterns.md +97 -97
- package/extensions/backend/skills/background-jobs.md +133 -133
- package/extensions/backend/skills/caching-patterns.md +108 -108
- package/extensions/backend/skills/cli-generation.md +133 -133
- package/extensions/backend/skills/database-patterns.md +87 -87
- package/extensions/backend/skills/middleware-patterns.md +104 -104
- package/extensions/chrome-ext/PACK.md +93 -93
- package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
- package/extensions/chrome-ext/skills/cws-publish.md +104 -104
- package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
- package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
- package/extensions/chrome-ext/skills/ext-storage.md +133 -133
- package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
- package/extensions/content/PACK.md +96 -96
- package/extensions/content/skills/blog-patterns.md +88 -88
- package/extensions/content/skills/cms-integration.md +131 -131
- package/extensions/content/skills/content-scoring.md +107 -107
- package/extensions/content/skills/i18n.md +83 -83
- package/extensions/content/skills/mdx-authoring.md +137 -137
- package/extensions/content/skills/reference.md +1014 -1014
- package/extensions/content/skills/seo-patterns.md +67 -67
- package/extensions/content/skills/video-repurpose.md +153 -153
- package/extensions/devops/PACK.md +101 -101
- package/extensions/devops/skills/chaos-testing.md +67 -67
- package/extensions/devops/skills/ci-cd.md +75 -75
- package/extensions/devops/skills/docker.md +58 -58
- package/extensions/devops/skills/edge-serverless.md +163 -163
- package/extensions/devops/skills/infra-as-code.md +158 -158
- package/extensions/devops/skills/kubernetes.md +110 -110
- package/extensions/devops/skills/monitoring.md +57 -57
- package/extensions/devops/skills/server-setup.md +64 -64
- package/extensions/devops/skills/ssl-domain.md +42 -42
- package/extensions/ecommerce/PACK.md +116 -116
- package/extensions/ecommerce/skills/cart-system.md +79 -79
- package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
- package/extensions/ecommerce/skills/order-management.md +126 -126
- package/extensions/ecommerce/skills/payment-integration.md +472 -472
- package/extensions/ecommerce/skills/shopify-dev.md +69 -69
- package/extensions/ecommerce/skills/subscription-billing.md +93 -93
- package/extensions/ecommerce/skills/tax-compliance.md +117 -117
- package/extensions/gamedev/PACK.md +142 -142
- package/extensions/gamedev/skills/asset-pipeline.md +74 -74
- package/extensions/gamedev/skills/audio-system.md +129 -129
- package/extensions/gamedev/skills/camera-system.md +87 -87
- package/extensions/gamedev/skills/ecs.md +98 -98
- package/extensions/gamedev/skills/game-loops.md +72 -72
- package/extensions/gamedev/skills/input-system.md +199 -199
- package/extensions/gamedev/skills/multiplayer.md +180 -180
- package/extensions/gamedev/skills/particles.md +105 -105
- package/extensions/gamedev/skills/physics-engine.md +89 -89
- package/extensions/gamedev/skills/scene-management.md +146 -146
- package/extensions/gamedev/skills/threejs-patterns.md +90 -90
- package/extensions/gamedev/skills/webgl.md +71 -71
- package/extensions/mobile/PACK.md +106 -106
- package/extensions/mobile/skills/app-store-connect.md +152 -152
- package/extensions/mobile/skills/app-store-prep.md +66 -66
- package/extensions/mobile/skills/deep-linking.md +109 -109
- package/extensions/mobile/skills/flutter.md +60 -60
- package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
- package/extensions/mobile/skills/native-bridge.md +66 -66
- package/extensions/mobile/skills/ota-updates.md +97 -97
- package/extensions/mobile/skills/push-notifications.md +111 -111
- package/extensions/mobile/skills/react-native.md +82 -82
- package/extensions/saas/PACK.md +116 -116
- package/extensions/saas/skills/billing-integration.md +200 -200
- package/extensions/saas/skills/feature-flags.md +130 -130
- package/extensions/saas/skills/multi-tenant.md +103 -103
- package/extensions/saas/skills/onboarding-flow.md +139 -139
- package/extensions/saas/skills/subscription-flow.md +95 -95
- package/extensions/saas/skills/team-management.md +144 -144
- package/extensions/security/PACK.md +99 -99
- package/extensions/security/skills/api-security.md +140 -140
- package/extensions/security/skills/compliance.md +68 -68
- package/extensions/security/skills/owasp-audit.md +64 -64
- package/extensions/security/skills/pentest-patterns.md +77 -77
- package/extensions/security/skills/secret-mgmt.md +65 -65
- package/extensions/security/skills/supply-chain.md +65 -65
- package/extensions/trading/PACK.md +80 -80
- package/extensions/trading/skills/chart-components.md +55 -55
- package/extensions/trading/skills/experiment-loop.md +125 -125
- package/extensions/trading/skills/fintech-patterns.md +47 -47
- package/extensions/trading/skills/indicator-library.md +58 -58
- package/extensions/trading/skills/quant-analysis.md +111 -111
- package/extensions/trading/skills/realtime-data.md +58 -58
- package/extensions/trading/skills/trade-logic.md +104 -104
- package/extensions/ui/PACK.md +130 -130
- package/extensions/ui/skills/a11y-audit.md +91 -91
- package/extensions/ui/skills/animation-patterns.md +127 -106
- package/extensions/ui/skills/component-patterns.md +100 -75
- package/extensions/ui/skills/design-decision.md +108 -108
- package/extensions/ui/skills/design-system.md +68 -68
- package/extensions/ui/skills/landing-patterns.md +155 -155
- package/extensions/ui/skills/palette-picker.md +173 -173
- package/extensions/ui/skills/react-health.md +90 -90
- package/extensions/ui/skills/type-system.md +125 -125
- package/extensions/ui/skills/web-vitals.md +153 -153
- package/extensions/zalo/PACK.md +145 -145
- package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
- package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
- package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
- package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
- package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
- package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
- package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
- package/hooks/auto-format/index.cjs +48 -48
- package/hooks/context-watch/index.cjs +95 -68
- package/hooks/hooks.json +111 -111
- package/hooks/metrics-collector/index.cjs +86 -42
- package/hooks/post-session-reflect/index.cjs +189 -153
- package/hooks/pre-compact/index.cjs +95 -95
- package/hooks/run-hook.cmd +1 -1
- package/hooks/secrets-scan/index.cjs +100 -100
- package/hooks/session-start/index.cjs +71 -65
- package/hooks/typecheck/index.cjs +65 -65
- package/package.json +63 -63
- package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
- package/references/ui-pro-max-data/charts.csv +26 -26
- package/references/ui-pro-max-data/colors.csv +161 -161
- package/references/ui-pro-max-data/styles.csv +68 -68
- package/references/ui-pro-max-data/typography.csv +74 -74
- package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
- package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
- package/skills/adversary/SKILL.md +283 -283
- package/skills/asset-creator/SKILL.md +157 -157
- package/skills/audit/SKILL.md +148 -2
- package/skills/autopsy/SKILL.md +335 -259
- package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
- package/skills/ba/SKILL.md +72 -2
- package/skills/brainstorm/SKILL.md +342 -341
- package/skills/browser-pilot/SKILL.md +168 -168
- package/skills/constraint-check/SKILL.md +165 -165
- package/skills/context-engine/SKILL.md +404 -404
- package/skills/cook/SKILL.md +917 -834
- package/skills/cook/references/output-format.md +33 -0
- package/skills/db/SKILL.md +273 -272
- package/skills/debug/SKILL.md +465 -443
- package/skills/dependency-doctor/SKILL.md +265 -235
- package/skills/deploy/SKILL.md +274 -231
- package/skills/design/DESIGN-REFERENCE.md +365 -365
- package/skills/design/SKILL.md +589 -482
- package/skills/doc-processor/SKILL.md +254 -254
- package/skills/docs/SKILL.md +374 -373
- package/skills/docs-seeker/SKILL.md +177 -177
- package/skills/fix/SKILL.md +330 -308
- package/skills/git/SKILL.md +339 -339
- package/skills/graft/SKILL.md +352 -0
- package/skills/graft/references/challenge-framework.md +98 -0
- package/skills/graft/references/mode-decision.md +44 -0
- package/skills/hallucination-guard/SKILL.md +219 -219
- package/skills/incident/SKILL.md +254 -251
- package/skills/integrity-check/SKILL.md +169 -169
- package/skills/journal/SKILL.md +240 -238
- package/skills/launch/SKILL.md +344 -342
- package/skills/logic-guardian/SKILL.md +251 -251
- package/skills/marketing/SKILL.md +290 -245
- package/skills/mcp-builder/SKILL.md +425 -423
- package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
- package/skills/neural-memory/SKILL.md +362 -362
- package/skills/onboard/SKILL.md +404 -403
- package/skills/perf/SKILL.md +346 -346
- package/skills/plan/SKILL.md +433 -370
- package/skills/plan/references/feature-map.md +84 -0
- package/skills/preflight/SKILL.md +415 -396
- package/skills/problem-solver/SKILL.md +380 -284
- package/skills/rescue/SKILL.md +474 -450
- package/skills/retro/SKILL.md +5 -1
- package/skills/review/SKILL.md +612 -535
- package/skills/review-intake/SKILL.md +249 -249
- package/skills/safeguard/SKILL.md +200 -200
- package/skills/sast/SKILL.md +190 -190
- package/skills/scaffold/SKILL.md +328 -286
- package/skills/scope-guard/SKILL.md +180 -162
- package/skills/scout/SKILL.md +263 -263
- package/skills/sentinel/SKILL.md +382 -353
- package/skills/sentinel-env/SKILL.md +254 -254
- package/skills/sequential-thinking/SKILL.md +234 -234
- package/skills/session-bridge/SKILL.md +543 -397
- package/skills/skill-forge/SKILL.md +581 -539
- package/skills/skill-router/{skill.md → SKILL.md} +30 -2
- package/skills/surgeon/SKILL.md +215 -215
- package/skills/team/SKILL.md +556 -514
- package/skills/test/SKILL.md +614 -587
- package/skills/trend-scout/SKILL.md +145 -145
- package/skills/verification/SKILL.md +326 -325
- package/skills/video-creator/SKILL.md +201 -201
- package/skills/watchdog/SKILL.md +168 -168
- package/skills/worktree/SKILL.md +140 -140
package/extensions/ui/PACK.md
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "@rune/ui"
|
|
3
|
-
description: Frontend UI patterns — React health scoring, Core Web Vitals auditing, design systems, color palettes, typography, component architecture, landing page sections, accessibility audits, animation patterns, and design decision mapping.
|
|
4
|
-
metadata:
|
|
5
|
-
author: runedev
|
|
6
|
-
version: "0.3.0"
|
|
7
|
-
layer: L4
|
|
8
|
-
price: "$12"
|
|
9
|
-
target: Frontend developers
|
|
10
|
-
format: split
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# @rune/ui
|
|
14
|
-
|
|
15
|
-
> Design intelligence data: [UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) (MIT) — 161 palettes, 84 styles, 73 font pairings, 99 UX guidelines. Located at `references/ui-pro-max-data/`.
|
|
16
|
-
|
|
17
|
-
## Purpose
|
|
18
|
-
|
|
19
|
-
Frontend development accumulates invisible debt: ad-hoc color variables, mismatched font pairings, prop-drilled components, untested accessibility, janky animations, React anti-patterns, and slow page loads — all before you even decide what the product should *look* like. This pack addresses all layers systematically. Ten skills cover the full UI lifecycle: React codebase health scoring, Core Web Vitals performance auditing, token consistency, color palette selection, typography pairing, component composability, landing page structure, design-domain mapping, WCAG compliance, and motion polish. Run any skill independently or chain all ten as a comprehensive UI health check + design foundation generator.
|
|
20
|
-
|
|
21
|
-
**Anti-AI Design Contract** (enforced by all skills in this pack):
|
|
22
|
-
- NO gradient blob heroes (purple → pink → blue)
|
|
23
|
-
- NO default indigo/violet (#6366f1) unless it IS the brand color
|
|
24
|
-
- NO Lucide icons — use Phosphor Icons (`@phosphor-icons/react`) or Huge Icons
|
|
25
|
-
- NO uniform card grids — vary sizes, establish visual hierarchy
|
|
26
|
-
- NO centered hero formula (big title + subtitle + 2 buttons stacked)
|
|
27
|
-
|
|
28
|
-
## Triggers
|
|
29
|
-
|
|
30
|
-
- Auto-trigger: when `*.tsx`, `*.svelte`, `*.vue`, CSS/Tailwind files detected in project
|
|
31
|
-
- `/rune design-system` — generate or enforce design tokens
|
|
32
|
-
- `/rune palette-picker` — select a curated color palette by product type
|
|
33
|
-
- `/rune type-system` — select a typography pairing by product tone
|
|
34
|
-
- `/rune component-patterns` — refactor component architecture
|
|
35
|
-
- `/rune landing-patterns` — generate landing page section structure
|
|
36
|
-
- `/rune design-decision` — map product domain to full style recommendation
|
|
37
|
-
- `/rune a11y-audit` — run accessibility audit
|
|
38
|
-
- `/rune animation-patterns` — add or refine motion design
|
|
39
|
-
- `/rune react-health` — score React codebase health (0-100)
|
|
40
|
-
- `/rune web-vitals` — audit Core Web Vitals and performance
|
|
41
|
-
- Called by `cook` (L1) when frontend task is detected
|
|
42
|
-
- Called by `review` (L2) when UI code is under review
|
|
43
|
-
- Called by `design` (L2) when visual design decisions needed
|
|
44
|
-
|
|
45
|
-
## Skills Included
|
|
46
|
-
|
|
47
|
-
| Skill | Model | Description |
|
|
48
|
-
|-------|-------|-------------|
|
|
49
|
-
| [react-health](skills/react-health.md) | sonnet | React codebase health scoring — 0-100 score across 6 dimensions: state management, effects hygiene, performance patterns, architecture, bundle efficiency, and accessibility. |
|
|
50
|
-
| [web-vitals](skills/web-vitals.md) | sonnet | Core Web Vitals performance audit — LCP, CLS, FCP, TBT, INP against Google thresholds. Identifies render-blocking resources, layout shift culprits, missing preloads, and tree-shaking opportunities. |
|
|
51
|
-
| [design-system](skills/design-system.md) | sonnet | Generate and enforce design system tokens — colors, typography, spacing, shadows, border radius. Consolidates ad-hoc values into a structured token file with full dark/light theme support. |
|
|
52
|
-
| [palette-picker](skills/palette-picker.md) | sonnet | Color palette database organized by product type. 25 curated palettes covering fintech, healthcare, education, gaming, ecommerce, SaaS, social, news/content, productivity, and developer tools. |
|
|
53
|
-
| [type-system](skills/type-system.md) | sonnet | Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale, weight mapping, and line height ratios. |
|
|
54
|
-
| [landing-patterns](skills/landing-patterns.md) | sonnet | Landing page section patterns — 12 section archetypes with HTML structure hints, Tailwind classes, responsive rules, and conversion-focused copy guidance. Anti-AI design rules enforced. |
|
|
55
|
-
| [design-decision](skills/design-decision.md) | sonnet | Product domain → style mapping. Outputs complete design recommendation: visual style, palette, typography pairing, component aesthetic, and design-system.md scaffold. |
|
|
56
|
-
| [component-patterns](skills/component-patterns.md) | sonnet | Component architecture patterns — compound components, render props, composition, slots. Detects prop-heavy components and guides refactoring toward composable architectures. |
|
|
57
|
-
| [a11y-audit](skills/a11y-audit.md) | sonnet | Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps. |
|
|
58
|
-
| [animation-patterns](skills/animation-patterns.md) | sonnet | Motion design patterns — micro-interactions, page transitions, scroll animations, loading states. CSS transitions, Framer Motion, or GSAP based on project stack. Always respects prefers-reduced-motion. |
|
|
59
|
-
|
|
60
|
-
## Tech Stack Support
|
|
61
|
-
|
|
62
|
-
| Framework | Styling | Components | Motion |
|
|
63
|
-
|--------------|--------------------|---------------|---------------------|
|
|
64
|
-
| React 19 | TailwindCSS 4 | shadcn/ui | Framer Motion |
|
|
65
|
-
| Next.js 16 | CSS Custom Props | Radix UI | Framer Motion |
|
|
66
|
-
| SvelteKit 5 | CSS Custom Props | Custom | View Transitions API|
|
|
67
|
-
| Vue 3 | TailwindCSS 4 | Headless UI | Vue Transitions |
|
|
68
|
-
| Astro 5 | TailwindCSS 4 | Astro Islands | View Transitions API|
|
|
69
|
-
|
|
70
|
-
## Connections
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
Calls → asset-creator (L3): generate design assets (icons, illustrations)
|
|
74
|
-
Calls → design (L2): escalate when full design review is needed
|
|
75
|
-
Calls → perf (L2): react-health and web-vitals feed findings to perf for deeper analysis
|
|
76
|
-
Calls → verification (L3): react-health triggers verification after fix application
|
|
77
|
-
Called By ← review (L2): when UI code is being reviewed
|
|
78
|
-
Called By ← cook (L1): when frontend task detected
|
|
79
|
-
Called By ← launch (L1): pre-launch UI quality gate
|
|
80
|
-
Called By ← scaffold (L1): when bootstrapping a new frontend project
|
|
81
|
-
Called By ← preflight (L2): react-health runs as pre-commit quality gate on React projects
|
|
82
|
-
design-decision → palette-picker: feeds palette slug to token generation
|
|
83
|
-
design-decision → type-system: feeds pairing name to font config generation
|
|
84
|
-
landing-patterns → palette-picker: pulls palette for section styling
|
|
85
|
-
landing-patterns → type-system: pulls font pairing for section copy
|
|
86
|
-
react-health → web-vitals: health report feeds into vitals audit for bundle-to-load correlation
|
|
87
|
-
web-vitals → react-health: slow LCP/TBT traces back to bundle bloat identified by react-health
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Constraints
|
|
91
|
-
|
|
92
|
-
1. MUST respect `prefers-reduced-motion` on every animation — no exceptions.
|
|
93
|
-
2. MUST NOT overwrite original component files during refactor — emit to `*.refactored.tsx` or provide a diff.
|
|
94
|
-
3. MUST target WCAG 2.1 AA as the minimum bar for all a11y recommendations (AAA where feasible).
|
|
95
|
-
4. MUST use project's existing stack (detect from `package.json`) before suggesting new dependencies.
|
|
96
|
-
5. MUST enforce Anti-AI design rules: no gradient blobs, no default indigo, Phosphor Icons not Lucide, no uniform card grids.
|
|
97
|
-
6. MUST use Google Fonts CDN only for external font loading — no other external font services.
|
|
98
|
-
7. Color palettes MUST include colorblind-safe alternatives (deuteranopia minimum).
|
|
99
|
-
|
|
100
|
-
## Sharp Edges
|
|
101
|
-
|
|
102
|
-
| Failure Mode | Severity | Mitigation |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| Token generation produces semantic tokens without primitives, causing theme switching to break | HIGH | Always emit 3-layer token structure: primitive → semantic → component |
|
|
105
|
-
| Compound component refactor breaks controlled state (open/value props lost) | HIGH | Audit for controlled vs uncontrolled patterns before emitting scaffold |
|
|
106
|
-
| axe-core misses ARIA live region issues and dynamic content violations | MEDIUM | Supplement automated scan with manual Grep for `setState`/store updates that modify visible content |
|
|
107
|
-
| Framer Motion animations ship without `useReducedMotion` check | HIGH | Grep for `motion.` usage post-edit; flag any missing the hook |
|
|
108
|
-
| Design token enforcement flags third-party library hardcoded values | LOW | Scope Grep to `src/` only; exclude `node_modules` and generated files |
|
|
109
|
-
| palette-picker recommends palette without contrast verification | HIGH | Always run contrast check in Step 4 before emitting palette.css |
|
|
110
|
-
| type-system recommends decorative font for body copy (Cormorant at 14px) | MEDIUM | Flag any pairing where body font is display/serif — warn readability at small sizes |
|
|
111
|
-
| landing-patterns emits centered hero formula (the anti-pattern) | HIGH | Enforce split-hero or asymmetric-hero as defaults; centered-hero requires explicit opt-in |
|
|
112
|
-
| design-decision recommends glassmorphism for data-dense dashboard | MEDIUM | Block glassmorphism recommendation when product domain is fintech, devtools, or productivity |
|
|
113
|
-
| Focus trap missing on modal — keyboard users trapped in page behind overlay | CRITICAL | a11y-audit Step 4 must scan all Dialog/Modal/Drawer/Popover components before audit closes |
|
|
114
|
-
|
|
115
|
-
## Done When
|
|
116
|
-
|
|
117
|
-
- React health score generated (0-100) with per-dimension breakdown; top 5 fixes listed by impact; dead code inventory complete
|
|
118
|
-
- Web Vitals report produced with all 6 metrics against thresholds; render-blocking resources identified; CLS culprits found; image optimization recommendations emitted
|
|
119
|
-
- Token file generated with 3-layer structure; hardcoded values replaced or flagged with diffs; dark/light theme switcher emitted
|
|
120
|
-
- Palette selected, CSS custom properties emitted, contrast ratios verified (≥ 4.5:1 body, ≥ 3:1 large text), colorblind alternatives noted
|
|
121
|
-
- Font pairing selected, Google Fonts link emitted, Tailwind fontFamily config emitted, type scale CSS variables written
|
|
122
|
-
- Component refactor scaffold emitted; original files untouched; slot patterns applied where applicable
|
|
123
|
-
- Landing section sequence composed; Anti-AI rules verified; responsive audit at 375/768/1280px complete; conversion checklist passed
|
|
124
|
-
- Design system .md generated with color, typography, component, and anti-pattern rules for the product domain
|
|
125
|
-
- Axe-core scan shows zero critical/serious violations; focus trap audit complete; skip nav link present
|
|
126
|
-
- All animations pass `prefers-reduced-motion` audit; page transition pattern implemented
|
|
127
|
-
|
|
128
|
-
## Cost Profile
|
|
129
|
-
|
|
130
|
-
~24,000–38,000 tokens per full pack run (all 10 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default. Use haiku for detection scans (Step 1 of each skill); escalate to sonnet for generation, refactoring, and report writing. Use `design-decision` first when starting a new project — it reduces token cost of subsequent skills by pre-scoping palette and typography choices.
|
|
1
|
+
---
|
|
2
|
+
name: "@rune/ui"
|
|
3
|
+
description: Frontend UI patterns — React health scoring, Core Web Vitals auditing, design systems, color palettes, typography, component architecture, landing page sections, accessibility audits, animation patterns, and design decision mapping.
|
|
4
|
+
metadata:
|
|
5
|
+
author: runedev
|
|
6
|
+
version: "0.3.0"
|
|
7
|
+
layer: L4
|
|
8
|
+
price: "$12"
|
|
9
|
+
target: Frontend developers
|
|
10
|
+
format: split
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# @rune/ui
|
|
14
|
+
|
|
15
|
+
> Design intelligence data: [UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) (MIT) — 161 palettes, 84 styles, 73 font pairings, 99 UX guidelines. Located at `references/ui-pro-max-data/`.
|
|
16
|
+
|
|
17
|
+
## Purpose
|
|
18
|
+
|
|
19
|
+
Frontend development accumulates invisible debt: ad-hoc color variables, mismatched font pairings, prop-drilled components, untested accessibility, janky animations, React anti-patterns, and slow page loads — all before you even decide what the product should *look* like. This pack addresses all layers systematically. Ten skills cover the full UI lifecycle: React codebase health scoring, Core Web Vitals performance auditing, token consistency, color palette selection, typography pairing, component composability, landing page structure, design-domain mapping, WCAG compliance, and motion polish. Run any skill independently or chain all ten as a comprehensive UI health check + design foundation generator.
|
|
20
|
+
|
|
21
|
+
**Anti-AI Design Contract** (enforced by all skills in this pack):
|
|
22
|
+
- NO gradient blob heroes (purple → pink → blue)
|
|
23
|
+
- NO default indigo/violet (#6366f1) unless it IS the brand color
|
|
24
|
+
- NO Lucide icons — use Phosphor Icons (`@phosphor-icons/react`) or Huge Icons
|
|
25
|
+
- NO uniform card grids — vary sizes, establish visual hierarchy
|
|
26
|
+
- NO centered hero formula (big title + subtitle + 2 buttons stacked)
|
|
27
|
+
|
|
28
|
+
## Triggers
|
|
29
|
+
|
|
30
|
+
- Auto-trigger: when `*.tsx`, `*.svelte`, `*.vue`, CSS/Tailwind files detected in project
|
|
31
|
+
- `/rune design-system` — generate or enforce design tokens
|
|
32
|
+
- `/rune palette-picker` — select a curated color palette by product type
|
|
33
|
+
- `/rune type-system` — select a typography pairing by product tone
|
|
34
|
+
- `/rune component-patterns` — refactor component architecture
|
|
35
|
+
- `/rune landing-patterns` — generate landing page section structure
|
|
36
|
+
- `/rune design-decision` — map product domain to full style recommendation
|
|
37
|
+
- `/rune a11y-audit` — run accessibility audit
|
|
38
|
+
- `/rune animation-patterns` — add or refine motion design
|
|
39
|
+
- `/rune react-health` — score React codebase health (0-100)
|
|
40
|
+
- `/rune web-vitals` — audit Core Web Vitals and performance
|
|
41
|
+
- Called by `cook` (L1) when frontend task is detected
|
|
42
|
+
- Called by `review` (L2) when UI code is under review
|
|
43
|
+
- Called by `design` (L2) when visual design decisions needed
|
|
44
|
+
|
|
45
|
+
## Skills Included
|
|
46
|
+
|
|
47
|
+
| Skill | Model | Description |
|
|
48
|
+
|-------|-------|-------------|
|
|
49
|
+
| [react-health](skills/react-health.md) | sonnet | React codebase health scoring — 0-100 score across 6 dimensions: state management, effects hygiene, performance patterns, architecture, bundle efficiency, and accessibility. |
|
|
50
|
+
| [web-vitals](skills/web-vitals.md) | sonnet | Core Web Vitals performance audit — LCP, CLS, FCP, TBT, INP against Google thresholds. Identifies render-blocking resources, layout shift culprits, missing preloads, and tree-shaking opportunities. |
|
|
51
|
+
| [design-system](skills/design-system.md) | sonnet | Generate and enforce design system tokens — colors, typography, spacing, shadows, border radius. Consolidates ad-hoc values into a structured token file with full dark/light theme support. |
|
|
52
|
+
| [palette-picker](skills/palette-picker.md) | sonnet | Color palette database organized by product type. 25 curated palettes covering fintech, healthcare, education, gaming, ecommerce, SaaS, social, news/content, productivity, and developer tools. |
|
|
53
|
+
| [type-system](skills/type-system.md) | sonnet | Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale, weight mapping, and line height ratios. |
|
|
54
|
+
| [landing-patterns](skills/landing-patterns.md) | sonnet | Landing page section patterns — 12 section archetypes with HTML structure hints, Tailwind classes, responsive rules, and conversion-focused copy guidance. Anti-AI design rules enforced. |
|
|
55
|
+
| [design-decision](skills/design-decision.md) | sonnet | Product domain → style mapping. Outputs complete design recommendation: visual style, palette, typography pairing, component aesthetic, and design-system.md scaffold. |
|
|
56
|
+
| [component-patterns](skills/component-patterns.md) | sonnet | Component architecture patterns — compound components, render props, composition, slots. Detects prop-heavy components and guides refactoring toward composable architectures. |
|
|
57
|
+
| [a11y-audit](skills/a11y-audit.md) | sonnet | Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps. |
|
|
58
|
+
| [animation-patterns](skills/animation-patterns.md) | sonnet | Motion design patterns — micro-interactions, page transitions, scroll animations, loading states. CSS transitions, Framer Motion, or GSAP based on project stack. Always respects prefers-reduced-motion. |
|
|
59
|
+
|
|
60
|
+
## Tech Stack Support
|
|
61
|
+
|
|
62
|
+
| Framework | Styling | Components | Motion |
|
|
63
|
+
|--------------|--------------------|---------------|---------------------|
|
|
64
|
+
| React 19 | TailwindCSS 4 | shadcn/ui | Framer Motion |
|
|
65
|
+
| Next.js 16 | CSS Custom Props | Radix UI | Framer Motion |
|
|
66
|
+
| SvelteKit 5 | CSS Custom Props | Custom | View Transitions API|
|
|
67
|
+
| Vue 3 | TailwindCSS 4 | Headless UI | Vue Transitions |
|
|
68
|
+
| Astro 5 | TailwindCSS 4 | Astro Islands | View Transitions API|
|
|
69
|
+
|
|
70
|
+
## Connections
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Calls → asset-creator (L3): generate design assets (icons, illustrations)
|
|
74
|
+
Calls → design (L2): escalate when full design review is needed
|
|
75
|
+
Calls → perf (L2): react-health and web-vitals feed findings to perf for deeper analysis
|
|
76
|
+
Calls → verification (L3): react-health triggers verification after fix application
|
|
77
|
+
Called By ← review (L2): when UI code is being reviewed
|
|
78
|
+
Called By ← cook (L1): when frontend task detected
|
|
79
|
+
Called By ← launch (L1): pre-launch UI quality gate
|
|
80
|
+
Called By ← scaffold (L1): when bootstrapping a new frontend project
|
|
81
|
+
Called By ← preflight (L2): react-health runs as pre-commit quality gate on React projects
|
|
82
|
+
design-decision → palette-picker: feeds palette slug to token generation
|
|
83
|
+
design-decision → type-system: feeds pairing name to font config generation
|
|
84
|
+
landing-patterns → palette-picker: pulls palette for section styling
|
|
85
|
+
landing-patterns → type-system: pulls font pairing for section copy
|
|
86
|
+
react-health → web-vitals: health report feeds into vitals audit for bundle-to-load correlation
|
|
87
|
+
web-vitals → react-health: slow LCP/TBT traces back to bundle bloat identified by react-health
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Constraints
|
|
91
|
+
|
|
92
|
+
1. MUST respect `prefers-reduced-motion` on every animation — no exceptions.
|
|
93
|
+
2. MUST NOT overwrite original component files during refactor — emit to `*.refactored.tsx` or provide a diff.
|
|
94
|
+
3. MUST target WCAG 2.1 AA as the minimum bar for all a11y recommendations (AAA where feasible).
|
|
95
|
+
4. MUST use project's existing stack (detect from `package.json`) before suggesting new dependencies.
|
|
96
|
+
5. MUST enforce Anti-AI design rules: no gradient blobs, no default indigo, Phosphor Icons not Lucide, no uniform card grids.
|
|
97
|
+
6. MUST use Google Fonts CDN only for external font loading — no other external font services.
|
|
98
|
+
7. Color palettes MUST include colorblind-safe alternatives (deuteranopia minimum).
|
|
99
|
+
|
|
100
|
+
## Sharp Edges
|
|
101
|
+
|
|
102
|
+
| Failure Mode | Severity | Mitigation |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| Token generation produces semantic tokens without primitives, causing theme switching to break | HIGH | Always emit 3-layer token structure: primitive → semantic → component |
|
|
105
|
+
| Compound component refactor breaks controlled state (open/value props lost) | HIGH | Audit for controlled vs uncontrolled patterns before emitting scaffold |
|
|
106
|
+
| axe-core misses ARIA live region issues and dynamic content violations | MEDIUM | Supplement automated scan with manual Grep for `setState`/store updates that modify visible content |
|
|
107
|
+
| Framer Motion animations ship without `useReducedMotion` check | HIGH | Grep for `motion.` usage post-edit; flag any missing the hook |
|
|
108
|
+
| Design token enforcement flags third-party library hardcoded values | LOW | Scope Grep to `src/` only; exclude `node_modules` and generated files |
|
|
109
|
+
| palette-picker recommends palette without contrast verification | HIGH | Always run contrast check in Step 4 before emitting palette.css |
|
|
110
|
+
| type-system recommends decorative font for body copy (Cormorant at 14px) | MEDIUM | Flag any pairing where body font is display/serif — warn readability at small sizes |
|
|
111
|
+
| landing-patterns emits centered hero formula (the anti-pattern) | HIGH | Enforce split-hero or asymmetric-hero as defaults; centered-hero requires explicit opt-in |
|
|
112
|
+
| design-decision recommends glassmorphism for data-dense dashboard | MEDIUM | Block glassmorphism recommendation when product domain is fintech, devtools, or productivity |
|
|
113
|
+
| Focus trap missing on modal — keyboard users trapped in page behind overlay | CRITICAL | a11y-audit Step 4 must scan all Dialog/Modal/Drawer/Popover components before audit closes |
|
|
114
|
+
|
|
115
|
+
## Done When
|
|
116
|
+
|
|
117
|
+
- React health score generated (0-100) with per-dimension breakdown; top 5 fixes listed by impact; dead code inventory complete
|
|
118
|
+
- Web Vitals report produced with all 6 metrics against thresholds; render-blocking resources identified; CLS culprits found; image optimization recommendations emitted
|
|
119
|
+
- Token file generated with 3-layer structure; hardcoded values replaced or flagged with diffs; dark/light theme switcher emitted
|
|
120
|
+
- Palette selected, CSS custom properties emitted, contrast ratios verified (≥ 4.5:1 body, ≥ 3:1 large text), colorblind alternatives noted
|
|
121
|
+
- Font pairing selected, Google Fonts link emitted, Tailwind fontFamily config emitted, type scale CSS variables written
|
|
122
|
+
- Component refactor scaffold emitted; original files untouched; slot patterns applied where applicable
|
|
123
|
+
- Landing section sequence composed; Anti-AI rules verified; responsive audit at 375/768/1280px complete; conversion checklist passed
|
|
124
|
+
- Design system .md generated with color, typography, component, and anti-pattern rules for the product domain
|
|
125
|
+
- Axe-core scan shows zero critical/serious violations; focus trap audit complete; skip nav link present
|
|
126
|
+
- All animations pass `prefers-reduced-motion` audit; page transition pattern implemented
|
|
127
|
+
|
|
128
|
+
## Cost Profile
|
|
129
|
+
|
|
130
|
+
~24,000–38,000 tokens per full pack run (all 10 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default. Use haiku for detection scans (Step 1 of each skill); escalate to sonnet for generation, refactoring, and report writing. Use `design-decision` first when starting a new project — it reduces token cost of subsequent skills by pre-scoping palette and typography choices.
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "a11y-audit"
|
|
3
|
-
pack: "@rune/ui"
|
|
4
|
-
description: "Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps, and skip navigation."
|
|
5
|
-
model: sonnet
|
|
6
|
-
tools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# a11y-audit
|
|
10
|
-
|
|
11
|
-
Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps, and skip navigation.
|
|
12
|
-
|
|
13
|
-
#### Workflow
|
|
14
|
-
|
|
15
|
-
**Step 1 — Automated scan**
|
|
16
|
-
Run `Bash: npx axe-core-cli <url> --reporter json` to capture all automated violations. Parse the JSON output and group by impact: critical → serious → moderate → minor.
|
|
17
|
-
|
|
18
|
-
**Step 2 — Manual WCAG 2.1 AA review**
|
|
19
|
-
Use Grep to find `onClick` on non-button elements (missing keyboard support), `<img` without `alt`, `aria-label` absence on icon-only buttons, and `outline: none` without a focus-visible replacement. Read flagged files and annotate each violation with the WCAG criterion it breaks.
|
|
20
|
-
|
|
21
|
-
**Step 3 — Emit audit report**
|
|
22
|
-
Produce a structured report: automated violations (count by impact), manual violations (file + line + fix), contrast ratios for brand colors (pass/fail at AA). Include a prioritized fix list.
|
|
23
|
-
|
|
24
|
-
**Step 4 — Focus trap audit + skip nav**
|
|
25
|
-
Scan for `Dialog`, `Modal`, `Drawer`, `Popover` components. Verify each has: a focus trap on open (`focus-trap-react` or `aria-modal`), returns focus to trigger on close, has an `aria-labelledby` referencing its title. Also check: first `<a>` in `<body>` is a "Skip to main content" link visible on focus (WCAG 2.4.1).
|
|
26
|
-
|
|
27
|
-
#### Example
|
|
28
|
-
|
|
29
|
-
```tsx
|
|
30
|
-
// VIOLATION: icon button with no accessible name
|
|
31
|
-
<button onClick={handleClose}>
|
|
32
|
-
<XIcon />
|
|
33
|
-
</button>
|
|
34
|
-
|
|
35
|
-
// FIX: add aria-label; icon is decorative
|
|
36
|
-
<button onClick={handleClose} aria-label="Close dialog">
|
|
37
|
-
<XIcon aria-hidden="true" />
|
|
38
|
-
</button>
|
|
39
|
-
|
|
40
|
-
// VIOLATION: div acting as button (no keyboard, no role)
|
|
41
|
-
<div onClick={handleSubmit}>Submit</div>
|
|
42
|
-
|
|
43
|
-
// FIX: use semantic element
|
|
44
|
-
<button type="button" onClick={handleSubmit}>Submit</button>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
```tsx
|
|
48
|
-
// Focus trap pattern for modals (using focus-trap-react)
|
|
49
|
-
import FocusTrap from 'focus-trap-react'
|
|
50
|
-
|
|
51
|
-
export function Dialog({ open, onClose, title, children }: DialogProps) {
|
|
52
|
-
return open ? (
|
|
53
|
-
<FocusTrap focusTrapOptions={{ onDeactivate: onClose }}>
|
|
54
|
-
<div
|
|
55
|
-
role="dialog"
|
|
56
|
-
aria-modal="true"
|
|
57
|
-
aria-labelledby="dialog-title"
|
|
58
|
-
className="fixed inset-0 z-50 flex items-center justify-center"
|
|
59
|
-
>
|
|
60
|
-
<div className="bg-[var(--bg-card)] rounded-xl p-6 max-w-md w-full shadow-lg">
|
|
61
|
-
<h2 id="dialog-title" className="text-h3 font-semibold mb-4">{title}</h2>
|
|
62
|
-
{children}
|
|
63
|
-
<button
|
|
64
|
-
onClick={onClose}
|
|
65
|
-
aria-label="Close dialog"
|
|
66
|
-
className="absolute top-4 right-4 focus-visible:ring-2 focus-visible:ring-[var(--primary)]"
|
|
67
|
-
>
|
|
68
|
-
<X aria-hidden="true" />
|
|
69
|
-
</button>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
</FocusTrap>
|
|
73
|
-
) : null
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
```html
|
|
78
|
-
<!-- Skip navigation link — must be FIRST focusable element in <body> -->
|
|
79
|
-
<a
|
|
80
|
-
href="#main-content"
|
|
81
|
-
class="
|
|
82
|
-
sr-only focus:not-sr-only
|
|
83
|
-
fixed top-4 left-4 z-[9999]
|
|
84
|
-
px-4 py-2 rounded-md
|
|
85
|
-
bg-[var(--primary)] text-white font-semibold text-sm
|
|
86
|
-
focus-visible:ring-2 focus-visible:ring-offset-2
|
|
87
|
-
"
|
|
88
|
-
>
|
|
89
|
-
Skip to main content
|
|
90
|
-
</a>
|
|
91
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: "a11y-audit"
|
|
3
|
+
pack: "@rune/ui"
|
|
4
|
+
description: "Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps, and skip navigation."
|
|
5
|
+
model: sonnet
|
|
6
|
+
tools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# a11y-audit
|
|
10
|
+
|
|
11
|
+
Accessibility audit beyond automated tools. Checks WCAG 2.1 AA compliance — focus management, screen reader compatibility, color contrast, ARIA patterns, keyboard navigation, focus traps, and skip navigation.
|
|
12
|
+
|
|
13
|
+
#### Workflow
|
|
14
|
+
|
|
15
|
+
**Step 1 — Automated scan**
|
|
16
|
+
Run `Bash: npx axe-core-cli <url> --reporter json` to capture all automated violations. Parse the JSON output and group by impact: critical → serious → moderate → minor.
|
|
17
|
+
|
|
18
|
+
**Step 2 — Manual WCAG 2.1 AA review**
|
|
19
|
+
Use Grep to find `onClick` on non-button elements (missing keyboard support), `<img` without `alt`, `aria-label` absence on icon-only buttons, and `outline: none` without a focus-visible replacement. Read flagged files and annotate each violation with the WCAG criterion it breaks.
|
|
20
|
+
|
|
21
|
+
**Step 3 — Emit audit report**
|
|
22
|
+
Produce a structured report: automated violations (count by impact), manual violations (file + line + fix), contrast ratios for brand colors (pass/fail at AA). Include a prioritized fix list.
|
|
23
|
+
|
|
24
|
+
**Step 4 — Focus trap audit + skip nav**
|
|
25
|
+
Scan for `Dialog`, `Modal`, `Drawer`, `Popover` components. Verify each has: a focus trap on open (`focus-trap-react` or `aria-modal`), returns focus to trigger on close, has an `aria-labelledby` referencing its title. Also check: first `<a>` in `<body>` is a "Skip to main content" link visible on focus (WCAG 2.4.1).
|
|
26
|
+
|
|
27
|
+
#### Example
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
// VIOLATION: icon button with no accessible name
|
|
31
|
+
<button onClick={handleClose}>
|
|
32
|
+
<XIcon />
|
|
33
|
+
</button>
|
|
34
|
+
|
|
35
|
+
// FIX: add aria-label; icon is decorative
|
|
36
|
+
<button onClick={handleClose} aria-label="Close dialog">
|
|
37
|
+
<XIcon aria-hidden="true" />
|
|
38
|
+
</button>
|
|
39
|
+
|
|
40
|
+
// VIOLATION: div acting as button (no keyboard, no role)
|
|
41
|
+
<div onClick={handleSubmit}>Submit</div>
|
|
42
|
+
|
|
43
|
+
// FIX: use semantic element
|
|
44
|
+
<button type="button" onClick={handleSubmit}>Submit</button>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
// Focus trap pattern for modals (using focus-trap-react)
|
|
49
|
+
import FocusTrap from 'focus-trap-react'
|
|
50
|
+
|
|
51
|
+
export function Dialog({ open, onClose, title, children }: DialogProps) {
|
|
52
|
+
return open ? (
|
|
53
|
+
<FocusTrap focusTrapOptions={{ onDeactivate: onClose }}>
|
|
54
|
+
<div
|
|
55
|
+
role="dialog"
|
|
56
|
+
aria-modal="true"
|
|
57
|
+
aria-labelledby="dialog-title"
|
|
58
|
+
className="fixed inset-0 z-50 flex items-center justify-center"
|
|
59
|
+
>
|
|
60
|
+
<div className="bg-[var(--bg-card)] rounded-xl p-6 max-w-md w-full shadow-lg">
|
|
61
|
+
<h2 id="dialog-title" className="text-h3 font-semibold mb-4">{title}</h2>
|
|
62
|
+
{children}
|
|
63
|
+
<button
|
|
64
|
+
onClick={onClose}
|
|
65
|
+
aria-label="Close dialog"
|
|
66
|
+
className="absolute top-4 right-4 focus-visible:ring-2 focus-visible:ring-[var(--primary)]"
|
|
67
|
+
>
|
|
68
|
+
<X aria-hidden="true" />
|
|
69
|
+
</button>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</FocusTrap>
|
|
73
|
+
) : null
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```html
|
|
78
|
+
<!-- Skip navigation link — must be FIRST focusable element in <body> -->
|
|
79
|
+
<a
|
|
80
|
+
href="#main-content"
|
|
81
|
+
class="
|
|
82
|
+
sr-only focus:not-sr-only
|
|
83
|
+
fixed top-4 left-4 z-[9999]
|
|
84
|
+
px-4 py-2 rounded-md
|
|
85
|
+
bg-[var(--primary)] text-white font-semibold text-sm
|
|
86
|
+
focus-visible:ring-2 focus-visible:ring-offset-2
|
|
87
|
+
"
|
|
88
|
+
>
|
|
89
|
+
Skip to main content
|
|
90
|
+
</a>
|
|
91
|
+
```
|