exonous 0.0.0-stage → 2.10.4
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/README.md +100 -2
- package/assets/THIRD-PARTY-NOTICES.md +29 -0
- package/assets/adapters/opencode/exonous.js +54 -0
- package/assets/agents/exo-backend.md +22 -0
- package/assets/agents/exo-cto.md +22 -0
- package/assets/agents/exo-data-ai.md +22 -0
- package/assets/agents/exo-designer.md +22 -0
- package/assets/agents/exo-devops.md +22 -0
- package/assets/agents/exo-frontend.md +22 -0
- package/assets/agents/exo-infra.md +22 -0
- package/assets/agents/exo-mobile.md +22 -0
- package/assets/agents/exo-pm.md +22 -0
- package/assets/agents/exo-qa.md +22 -0
- package/assets/agents/exo-researcher.md +22 -0
- package/assets/agents/exo-security.md +22 -0
- package/assets/agents/roster.json +209 -0
- package/assets/agents/taxis.js +189 -0
- package/assets/editors/cursor/frontend-skills.mdc +27 -0
- package/assets/editors/hooks/cursor/hooks.json +11 -0
- package/assets/machine/PR-TEMPLATE.md +21 -0
- package/assets/machine/hooks/anamnesis.cjs +61 -0
- package/assets/machine/hooks/ethos.cjs +48 -0
- package/assets/machine/hooks/kairos.cjs +46 -0
- package/assets/machine/hooks/lib/cli-options.cjs +133 -0
- package/assets/machine/hooks/lib/memory.cjs +488 -0
- package/assets/machine/hooks/lib/metron.cjs +52 -0
- package/assets/machine/hooks/lib/paths.cjs +99 -0
- package/assets/machine/hooks/lib/payload.cjs +81 -0
- package/assets/machine/hooks/lib/pr-template-validate.cjs +103 -0
- package/assets/machine/hooks/lib/release.cjs +58 -0
- package/assets/machine/hooks/lib/repo.cjs +138 -0
- package/assets/machine/hooks/lib/sanitize.cjs +37 -0
- package/assets/machine/hooks/lib/selfupdate.cjs +354 -0
- package/assets/machine/hooks/lib/shell.cjs +722 -0
- package/assets/machine/hooks/lib/template.cjs +70 -0
- package/assets/machine/hooks/lib/token.cjs +110 -0
- package/assets/machine/hooks/lib/validate-pr-body.cjs +21 -0
- package/assets/machine/hooks/pyle.cjs +302 -0
- package/assets/rules/nomos.md +59 -0
- package/assets/rules/praxis.md +38 -0
- package/assets/skills/code-review/SKILL.md +124 -0
- package/assets/skills/commit-changes/SKILL.md +49 -0
- package/assets/skills/deliver/SKILL.md +114 -0
- package/assets/skills/deliver/references/parallel.md +37 -0
- package/assets/skills/doc/SKILL.md +140 -0
- package/assets/skills/doc/doc.mjs +277 -0
- package/assets/skills/issue-board/SKILL.md +84 -0
- package/assets/skills/issue-board/board.mjs +389 -0
- package/assets/skills/issue-board/config.example.json +9 -0
- package/assets/skills/issue-board/render.py +189 -0
- package/assets/skills/make-pr/SKILL.md +24 -0
- package/assets/skills/native-ui/SKILL.md +67 -0
- package/assets/skills/native-ui/reference/apple.md +180 -0
- package/assets/skills/native-ui/reference/mobile-feel.md +221 -0
- package/assets/skills/native-ui/reference/swift.md +289 -0
- package/assets/skills/project-memory/SKILL.md +59 -0
- package/assets/skills/project-memory/config.example.json +4 -0
- package/assets/skills/project-memory/project-memory.mjs +478 -0
- package/assets/skills/security-review/SKILL.md +102 -0
- package/assets/skills/session-handoff/SKILL.md +23 -0
- package/assets/skills/session-handoff/config.example.json +3 -0
- package/assets/skills/ui-design/SKILL.md +75 -0
- package/assets/skills/ui-design/reference/adapt.md +151 -0
- package/assets/skills/ui-design/reference/adapt.native.md +35 -0
- package/assets/skills/ui-design/reference/android.md +50 -0
- package/assets/skills/ui-design/reference/animate.md +87 -0
- package/assets/skills/ui-design/reference/audit.md +76 -0
- package/assets/skills/ui-design/reference/audit.native.md +126 -0
- package/assets/skills/ui-design/reference/bolder.md +33 -0
- package/assets/skills/ui-design/reference/clarify.md +84 -0
- package/assets/skills/ui-design/reference/colorize.md +86 -0
- package/assets/skills/ui-design/reference/craft-floor.md +25 -0
- package/assets/skills/ui-design/reference/critique.md +345 -0
- package/assets/skills/ui-design/reference/degraded/asset-producer.md +35 -0
- package/assets/skills/ui-design/reference/degraded/documenter.md +23 -0
- package/assets/skills/ui-design/reference/degraded/finish-reviewer.md +43 -0
- package/assets/skills/ui-design/reference/degraded/manual-edit-applier.md +56 -0
- package/assets/skills/ui-design/reference/delight.md +63 -0
- package/assets/skills/ui-design/reference/distill.md +98 -0
- package/assets/skills/ui-design/reference/doctor.md +49 -0
- package/assets/skills/ui-design/reference/document.md +273 -0
- package/assets/skills/ui-design/reference/extract.md +52 -0
- package/assets/skills/ui-design/reference/harden.md +122 -0
- package/assets/skills/ui-design/reference/hooks.md +114 -0
- package/assets/skills/ui-design/reference/init.md +47 -0
- package/assets/skills/ui-design/reference/ios.md +55 -0
- package/assets/skills/ui-design/reference/layout.md +81 -0
- package/assets/skills/ui-design/reference/live-setup.md +75 -0
- package/assets/skills/ui-design/reference/live.md +326 -0
- package/assets/skills/ui-design/reference/new-work.md +350 -0
- package/assets/skills/ui-design/reference/onboard.md +85 -0
- package/assets/skills/ui-design/reference/operate.md +29 -0
- package/assets/skills/ui-design/reference/optimize.md +101 -0
- package/assets/skills/ui-design/reference/overdrive.md +83 -0
- package/assets/skills/ui-design/reference/polish.md +77 -0
- package/assets/skills/ui-design/reference/quieter.md +95 -0
- package/assets/skills/ui-design/reference/routing.md +37 -0
- package/assets/skills/ui-design/reference/shape.md +43 -0
- package/assets/skills/ui-design/reference/styles/brutalist.md +45 -0
- package/assets/skills/ui-design/reference/styles/design-md.md +70 -0
- package/assets/skills/ui-design/reference/styles/direction.md +95 -0
- package/assets/skills/ui-design/reference/styles/full-output.md +42 -0
- package/assets/skills/ui-design/reference/styles/minimalist.md +64 -0
- package/assets/skills/ui-design/reference/styles/premium.md +65 -0
- package/assets/skills/ui-design/reference/styles/redesign.md +59 -0
- package/assets/skills/ui-design/reference/typeset.md +73 -0
- package/assets/skills/ui-design/reference/visualize.md +156 -0
- package/assets/skills/ui-design/scripts/ENGINE-LICENSE +191 -0
- package/assets/skills/ui-design/scripts/VERSION +1 -0
- package/assets/skills/ui-design/scripts/bin/darwin-arm64/impeccable +0 -0
- package/assets/skills/ui-design/scripts/command-metadata.json +94 -0
- package/assets/skills/ui-design/scripts/data/font-index-failures.json +121 -0
- package/assets/skills/ui-design/scripts/data/font-index.json +1 -0
- package/assets/skills/ui-design/scripts/impeccable +206 -0
- package/assets/skills/ui-design/scripts/impeccable.cmd +214 -0
- package/assets/skills/ui-design/scripts/live-browser-dom.js +167 -0
- package/assets/skills/ui-design/scripts/live-browser-ignores.js +242 -0
- package/assets/skills/ui-design/scripts/live-browser-session.js +144 -0
- package/assets/skills/ui-design/scripts/live-browser.js +12990 -0
- package/assets/skills/ui-design/scripts/modern-screenshot.umd.js +14 -0
- package/assets/skills/ui-design/scripts/ui-design +6 -0
- package/assets/skills/ui-design/scripts/ui-design.cmd +3 -0
- package/assets/skills/ui-design/scripts/ui-design.mjs +124 -0
- package/assets/skills/ui-mockup/SKILL.md +68 -0
- package/assets/skills/ui-mockup/reference/brandkit.md +101 -0
- package/assets/skills/ui-mockup/reference/image-to-code.md +83 -0
- package/assets/skills/ui-mockup/reference/mobile-comps.md +94 -0
- package/assets/skills/ui-mockup/reference/web-comps.md +83 -0
- package/assets/skills/ui-motion/SKILL.md +112 -0
- package/assets/skills/ui-motion/reference/expo.md +224 -0
- package/assets/skills/ui-motion/reference/opportunities.md +81 -0
- package/assets/skills/ui-motion/reference/prototype.md +238 -0
- package/assets/skills/ui-motion/reference/review.md +163 -0
- package/assets/skills/ui-motion/reference/toasts.md +144 -0
- package/assets/skills/ui-motion/reference/ui-libraries.md +71 -0
- package/assets/skills/ui-motion/reference/vocabulary.md +130 -0
- package/assets/skills/ui-motion/reference/web.md +294 -0
- package/assets/skills/ui-patterns/SKILL.md +105 -0
- package/assets/skills/ui-patterns/references/stacks/html-tailwind.md +40 -0
- package/assets/skills/ui-patterns/references/stacks/nextjs.md +52 -0
- package/assets/skills/ui-patterns/references/stacks/nuxt.md +100 -0
- package/assets/skills/ui-patterns/references/stacks/react-native.md +48 -0
- package/assets/skills/ui-patterns/references/stacks/react.md +49 -0
- package/assets/skills/ui-patterns/references/stacks/shadcn.md +57 -0
- package/assets/skills/ui-patterns/references/stacks/vue.md +37 -0
- package/assets/techne/.claude-plugin/marketplace.json +31 -0
- package/assets/techne/.claude-plugin/plugin.json +24 -0
- package/assets/techne/.mcp.json +8 -0
- package/assets/techne/commands/build-fix.md +48 -0
- package/assets/techne/commands/refactor-clean.md +46 -0
- package/assets/techne/commands/test-coverage.md +42 -0
- package/assets/techne/hooks/hooks.json +49 -0
- package/assets/techne/rules/angular/coding-style.md +49 -0
- package/assets/techne/rules/angular/hooks.md +23 -0
- package/assets/techne/rules/angular/patterns.md +48 -0
- package/assets/techne/rules/angular/security.md +26 -0
- package/assets/techne/rules/angular/testing.md +46 -0
- package/assets/techne/rules/arkts/coding-style.md +63 -0
- package/assets/techne/rules/arkts/hooks.md +38 -0
- package/assets/techne/rules/arkts/patterns.md +42 -0
- package/assets/techne/rules/arkts/security.md +35 -0
- package/assets/techne/rules/arkts/testing.md +39 -0
- package/assets/techne/rules/common/agents.md +6 -0
- package/assets/techne/rules/common/code-review.md +15 -0
- package/assets/techne/rules/common/coding-style.md +13 -0
- package/assets/techne/rules/common/development-workflow.md +5 -0
- package/assets/techne/rules/common/git-workflow.md +30 -0
- package/assets/techne/rules/common/hooks.md +7 -0
- package/assets/techne/rules/common/patterns.md +3 -0
- package/assets/techne/rules/common/performance.md +3 -0
- package/assets/techne/rules/common/security.md +5 -0
- package/assets/techne/rules/common/testing.md +3 -0
- package/assets/techne/rules/cpp/coding-style.md +31 -0
- package/assets/techne/rules/cpp/hooks.md +26 -0
- package/assets/techne/rules/cpp/patterns.md +31 -0
- package/assets/techne/rules/cpp/security.md +37 -0
- package/assets/techne/rules/cpp/testing.md +31 -0
- package/assets/techne/rules/csharp/coding-style.md +30 -0
- package/assets/techne/rules/csharp/hooks.md +24 -0
- package/assets/techne/rules/csharp/patterns.md +28 -0
- package/assets/techne/rules/csharp/security.md +32 -0
- package/assets/techne/rules/csharp/testing.md +27 -0
- package/assets/techne/rules/dart/coding-style.md +47 -0
- package/assets/techne/rules/dart/hooks.md +26 -0
- package/assets/techne/rules/dart/patterns.md +38 -0
- package/assets/techne/rules/dart/security.md +44 -0
- package/assets/techne/rules/dart/testing.md +39 -0
- package/assets/techne/rules/fsharp/coding-style.md +34 -0
- package/assets/techne/rules/fsharp/hooks.md +25 -0
- package/assets/techne/rules/fsharp/patterns.md +43 -0
- package/assets/techne/rules/fsharp/security.md +32 -0
- package/assets/techne/rules/fsharp/testing.md +27 -0
- package/assets/techne/rules/golang/coding-style.md +30 -0
- package/assets/techne/rules/golang/hooks.md +17 -0
- package/assets/techne/rules/golang/patterns.md +43 -0
- package/assets/techne/rules/golang/security.md +33 -0
- package/assets/techne/rules/golang/testing.md +20 -0
- package/assets/techne/rules/java/coding-style.md +51 -0
- package/assets/techne/rules/java/hooks.md +18 -0
- package/assets/techne/rules/java/patterns.md +55 -0
- package/assets/techne/rules/java/security.md +33 -0
- package/assets/techne/rules/java/testing.md +33 -0
- package/assets/techne/rules/kotlin/coding-style.md +50 -0
- package/assets/techne/rules/kotlin/hooks.md +17 -0
- package/assets/techne/rules/kotlin/patterns.md +44 -0
- package/assets/techne/rules/kotlin/security.md +34 -0
- package/assets/techne/rules/kotlin/testing.md +38 -0
- package/assets/techne/rules/nuxt/coding-style.md +20 -0
- package/assets/techne/rules/nuxt/hooks.md +16 -0
- package/assets/techne/rules/nuxt/patterns.md +46 -0
- package/assets/techne/rules/nuxt/security.md +19 -0
- package/assets/techne/rules/nuxt/testing.md +15 -0
- package/assets/techne/rules/perl/coding-style.md +33 -0
- package/assets/techne/rules/perl/hooks.md +22 -0
- package/assets/techne/rules/perl/patterns.md +43 -0
- package/assets/techne/rules/perl/security.md +39 -0
- package/assets/techne/rules/perl/testing.md +42 -0
- package/assets/techne/rules/php/coding-style.md +30 -0
- package/assets/techne/rules/php/hooks.md +24 -0
- package/assets/techne/rules/php/patterns.md +26 -0
- package/assets/techne/rules/php/security.md +27 -0
- package/assets/techne/rules/php/testing.md +28 -0
- package/assets/techne/rules/python/coding-style.md +38 -0
- package/assets/techne/rules/python/fastapi.md +57 -0
- package/assets/techne/rules/python/hooks.md +19 -0
- package/assets/techne/rules/python/patterns.md +37 -0
- package/assets/techne/rules/python/security.md +26 -0
- package/assets/techne/rules/python/testing.md +32 -0
- package/assets/techne/rules/react/coding-style.md +24 -0
- package/assets/techne/rules/react/hooks.md +62 -0
- package/assets/techne/rules/react/patterns.md +48 -0
- package/assets/techne/rules/react/security.md +45 -0
- package/assets/techne/rules/react/testing.md +42 -0
- package/assets/techne/rules/react-native/accessibility.md +14 -0
- package/assets/techne/rules/react-native/coding-style.md +16 -0
- package/assets/techne/rules/react-native/hooks.md +16 -0
- package/assets/techne/rules/react-native/patterns.md +18 -0
- package/assets/techne/rules/react-native/performance.md +14 -0
- package/assets/techne/rules/react-native/production-readiness.md +16 -0
- package/assets/techne/rules/react-native/security.md +16 -0
- package/assets/techne/rules/react-native/testing.md +14 -0
- package/assets/techne/rules/ruby/coding-style.md +40 -0
- package/assets/techne/rules/ruby/hooks.md +33 -0
- package/assets/techne/rules/ruby/patterns.md +33 -0
- package/assets/techne/rules/ruby/security.md +39 -0
- package/assets/techne/rules/ruby/testing.md +35 -0
- package/assets/techne/rules/rust/coding-style.md +41 -0
- package/assets/techne/rules/rust/hooks.md +16 -0
- package/assets/techne/rules/rust/patterns.md +42 -0
- package/assets/techne/rules/rust/security.md +33 -0
- package/assets/techne/rules/rust/testing.md +30 -0
- package/assets/techne/rules/swift/coding-style.md +30 -0
- package/assets/techne/rules/swift/hooks.md +20 -0
- package/assets/techne/rules/swift/patterns.md +30 -0
- package/assets/techne/rules/swift/security.md +22 -0
- package/assets/techne/rules/swift/testing.md +28 -0
- package/assets/techne/rules/typescript/coding-style.md +38 -0
- package/assets/techne/rules/typescript/hooks.md +14 -0
- package/assets/techne/rules/typescript/patterns.md +12 -0
- package/assets/techne/rules/typescript/security.md +14 -0
- package/assets/techne/rules/typescript/testing.md +12 -0
- package/assets/techne/rules/vue/coding-style.md +19 -0
- package/assets/techne/rules/vue/hooks.md +13 -0
- package/assets/techne/rules/vue/patterns.md +29 -0
- package/assets/techne/rules/vue/security.md +11 -0
- package/assets/techne/rules/vue/testing.md +11 -0
- package/assets/techne/rules/web/coding-style.md +25 -0
- package/assets/techne/rules/web/design-quality.md +21 -0
- package/assets/techne/rules/web/hooks.md +39 -0
- package/assets/techne/rules/web/patterns.md +23 -0
- package/assets/techne/rules/web/performance.md +25 -0
- package/assets/techne/rules/web/security.md +23 -0
- package/assets/techne/rules/web/testing.md +21 -0
- package/assets/techne/scripts/hooks/config-guard.js +50 -0
- package/assets/techne/scripts/hooks/edit-tracker.js +26 -0
- package/assets/techne/scripts/hooks/lib/shell.js +204 -0
- package/assets/techne/scripts/hooks/no-verify-guard.js +205 -0
- package/assets/techne/scripts/hooks/run.js +92 -0
- package/assets/techne/scripts/hooks/stop-checks.js +136 -0
- package/assets/techne/skills/angular/SKILL.md +34 -0
- package/assets/techne/skills/angular/reference/components-and-templates.md +63 -0
- package/assets/techne/skills/angular/reference/dependency-injection.md +44 -0
- package/assets/techne/skills/angular/reference/forms.md +97 -0
- package/assets/techne/skills/angular/reference/routing.md +50 -0
- package/assets/techne/skills/angular/reference/signals-and-state.md +59 -0
- package/assets/techne/skills/angular/reference/styling-motion-a11y.md +54 -0
- package/assets/techne/skills/angular/reference/testing.md +52 -0
- package/assets/techne/skills/angular/reference/tooling.md +31 -0
- package/assets/techne/skills/cpp/SKILL.md +27 -0
- package/assets/techne/skills/cpp/reference/coding-standards.md +160 -0
- package/assets/techne/skills/databases/SKILL.md +35 -0
- package/assets/techne/skills/databases/reference/clickhouse.md +102 -0
- package/assets/techne/skills/databases/reference/migrations.md +94 -0
- package/assets/techne/skills/databases/reference/mysql.md +101 -0
- package/assets/techne/skills/databases/reference/postgres.md +72 -0
- package/assets/techne/skills/databases/reference/prisma.md +105 -0
- package/assets/techne/skills/databases/reference/redis.md +108 -0
- package/assets/techne/skills/delivery/SKILL.md +35 -0
- package/assets/techne/skills/delivery/reference/deployment-patterns.md +58 -0
- package/assets/techne/skills/delivery/reference/docker-patterns.md +77 -0
- package/assets/techne/skills/delivery/reference/git-workflow.md +64 -0
- package/assets/techne/skills/delivery/reference/github-ops.md +67 -0
- package/assets/techne/skills/delivery/reference/jira-integration.md +53 -0
- package/assets/techne/skills/delivery/reference/kubernetes-patterns.md +67 -0
- package/assets/techne/skills/dotnet/SKILL.md +27 -0
- package/assets/techne/skills/dotnet/reference/dotnet-core.md +131 -0
- package/assets/techne/skills/flutter/SKILL.md +29 -0
- package/assets/techne/skills/flutter/reference/code-review.md +76 -0
- package/assets/techne/skills/flutter/reference/patterns.md +201 -0
- package/assets/techne/skills/go/SKILL.md +28 -0
- package/assets/techne/skills/go/reference/patterns.md +87 -0
- package/assets/techne/skills/go/reference/testing.md +142 -0
- package/assets/techne/skills/java/SKILL.md +29 -0
- package/assets/techne/skills/java/reference/java-standards.md +117 -0
- package/assets/techne/skills/java/reference/springboot.md +108 -0
- package/assets/techne/skills/kotlin/SKILL.md +35 -0
- package/assets/techne/skills/kotlin/reference/android-clean-architecture.md +115 -0
- package/assets/techne/skills/kotlin/reference/compose-multiplatform-patterns.md +113 -0
- package/assets/techne/skills/kotlin/reference/kotlin-coroutines-flows.md +93 -0
- package/assets/techne/skills/kotlin/reference/kotlin-patterns.md +74 -0
- package/assets/techne/skills/kotlin/reference/kotlin-testing.md +115 -0
- package/assets/techne/skills/ml/SKILL.md +34 -0
- package/assets/techne/skills/ml/reference/ai-regression-testing.md +99 -0
- package/assets/techne/skills/ml/reference/cost-aware-llm-pipeline.md +133 -0
- package/assets/techne/skills/ml/reference/eval-harness.md +94 -0
- package/assets/techne/skills/ml/reference/mle-workflow.md +177 -0
- package/assets/techne/skills/ml/reference/prompt-optimizer.md +107 -0
- package/assets/techne/skills/ml/reference/pytorch-patterns.md +164 -0
- package/assets/techne/skills/php/SKILL.md +27 -0
- package/assets/techne/skills/php/reference/laravel.md +142 -0
- package/assets/techne/skills/python/SKILL.md +33 -0
- package/assets/techne/skills/python/reference/django.md +104 -0
- package/assets/techne/skills/python/reference/fastapi.md +118 -0
- package/assets/techne/skills/python/reference/python-core.md +88 -0
- package/assets/techne/skills/python/reference/python-testing.md +105 -0
- package/assets/techne/skills/quality/SKILL.md +34 -0
- package/assets/techne/skills/quality/reference/benchmark.md +55 -0
- package/assets/techne/skills/quality/reference/browser-qa.md +60 -0
- package/assets/techne/skills/quality/reference/coding-standards.md +88 -0
- package/assets/techne/skills/quality/reference/e2e-testing.md +99 -0
- package/assets/techne/skills/quality/reference/tdd-workflow.md +89 -0
- package/assets/techne/skills/quality/reference/verification-loop.md +80 -0
- package/assets/techne/skills/react/SKILL.md +30 -0
- package/assets/techne/skills/react/reference/nextjs-turbopack.md +42 -0
- package/assets/techne/skills/react/reference/react-patterns.md +139 -0
- package/assets/techne/skills/react/reference/react-performance.md +101 -0
- package/assets/techne/skills/react/reference/react-testing.md +139 -0
- package/assets/techne/skills/react-native/SKILL.md +28 -0
- package/assets/techne/skills/react-native/reference/expo-patterns.md +196 -0
- package/assets/techne/skills/research/SKILL.md +35 -0
- package/assets/techne/skills/research/reference/architecture-decision-records.md +65 -0
- package/assets/techne/skills/research/reference/codebase-onboarding.md +44 -0
- package/assets/techne/skills/research/reference/deep-research.md +50 -0
- package/assets/techne/skills/research/reference/iterative-retrieval.md +62 -0
- package/assets/techne/skills/research/reference/product-lens.md +38 -0
- package/assets/techne/skills/research/reference/search-first.md +50 -0
- package/assets/techne/skills/rust/SKILL.md +28 -0
- package/assets/techne/skills/rust/reference/patterns.md +108 -0
- package/assets/techne/skills/rust/reference/testing.md +142 -0
- package/assets/techne/skills/services/SKILL.md +32 -0
- package/assets/techne/skills/services/reference/api-contracts.md +139 -0
- package/assets/techne/skills/services/reference/backend-layers.md +95 -0
- package/assets/techne/skills/services/reference/errors-and-resilience.md +146 -0
- package/assets/techne/skills/services/reference/hexagonal-boundaries.md +93 -0
- package/assets/techne/skills/services/reference/mcp-servers.md +50 -0
- package/assets/techne/skills/services/reference/nestjs.md +96 -0
- package/assets/techne/skills/swift/SKILL.md +29 -0
- package/assets/techne/skills/swift/reference/concurrency.md +83 -0
- package/assets/techne/skills/swift/reference/swiftui.md +139 -0
- package/assets/techne/skills/vue/SKILL.md +29 -0
- package/assets/techne/skills/vue/reference/nuxt4-patterns.md +90 -0
- package/assets/techne/skills/vue/reference/ui-to-vue.md +90 -0
- package/assets/techne/skills/vue/reference/vue-patterns.md +151 -0
- package/assets/techne/skills/web/SKILL.md +30 -0
- package/assets/techne/skills/web/reference/bun-runtime.md +55 -0
- package/assets/techne/skills/web/reference/frontend-patterns.md +54 -0
- package/assets/techne/skills/web/reference/seo.md +77 -0
- package/assets/techne/skills/web/reference/vite-patterns.md +96 -0
- package/bin/native.cjs +30 -0
- package/native/aarch64-apple-darwin/exonous +0 -0
- package/native/aarch64-unknown-linux-gnu/exonous +0 -0
- package/native/x86_64-apple-darwin/exonous +0 -0
- package/native/x86_64-pc-windows-msvc/exonous.exe +0 -0
- package/native/x86_64-unknown-linux-gnu/exonous +0 -0
- package/package.json +1 -6
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Motion vocabulary (reverse lookup)
|
|
2
|
+
|
|
3
|
+
Maps vague descriptions to precise terms so prompts and specs use shared language. Naming only — not build (`reference/web.md`) or audit (`reference/review.md`).
|
|
4
|
+
|
|
5
|
+
## How to answer
|
|
6
|
+
|
|
7
|
+
User describes what they see or feel. Return:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
**Term** — One-line definition.
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Best match first; 1–2 alternates if close. Disambiguate (e.g. crossfade vs shared-element vs morph). If no exact match, say so and compose from glossary terms. Keep answers short.
|
|
14
|
+
|
|
15
|
+
## Glossary
|
|
16
|
+
|
|
17
|
+
### Entrances & exits
|
|
18
|
+
- **Fade in / Fade out** — Opacity to visible or hidden.
|
|
19
|
+
- **Slide in** — Enters from off-screen edge.
|
|
20
|
+
- **Scale in** — Grows from smaller size, often with fade.
|
|
21
|
+
- **Pop in** — Slight overshoot on arrival.
|
|
22
|
+
- **Reveal** — Gradual uncover via clip or mask.
|
|
23
|
+
- **Enter / Exit** — Motion when node mounts or unmounts.
|
|
24
|
+
|
|
25
|
+
### Sequencing & timing
|
|
26
|
+
- **Keyframes** — Defined waypoints the engine interpolates between.
|
|
27
|
+
- **Interpolation / Tween** — In-between frames between start and end values.
|
|
28
|
+
- **Stagger** — Sequential starts with small offsets — cascade.
|
|
29
|
+
- **Orchestration** — Multiple motions timed as one beat.
|
|
30
|
+
- **Delay** — Wait before start.
|
|
31
|
+
- **Duration** — Length of motion.
|
|
32
|
+
- **Fill mode** — Styles held before/after (e.g. forwards).
|
|
33
|
+
- **Stepped animation** — Discrete steps, not smooth blend.
|
|
34
|
+
|
|
35
|
+
### Movement & transforms
|
|
36
|
+
- **Translate** — Shift along X or Y.
|
|
37
|
+
- **Scale** — Resize uniformly.
|
|
38
|
+
- **Rotate** — Spin around a point.
|
|
39
|
+
- **Skew** — Shear from rectangular shape.
|
|
40
|
+
- **3D tilt / Flip** — rotateX/Y depth.
|
|
41
|
+
- **Perspective** — Viewer distance for 3D exaggeration.
|
|
42
|
+
- **Transform origin** — Anchor for scale/rotate.
|
|
43
|
+
- **Origin-aware animation** — Grows from trigger, not box center.
|
|
44
|
+
|
|
45
|
+
### State transitions
|
|
46
|
+
- **Crossfade** — Overlap fade between two states same place.
|
|
47
|
+
- **Continuity transition** — Same object reads across states (resize, reposition).
|
|
48
|
+
- **Morph** — One shape becomes another.
|
|
49
|
+
- **Shared element transition** — Element travels between layouts.
|
|
50
|
+
- **Layout animation** — Size/position animates to new layout.
|
|
51
|
+
- **Accordion / Collapse** — Height opens/closes for content.
|
|
52
|
+
- **Direction-aware transition** — Forward/back slide opposes by nav direction.
|
|
53
|
+
|
|
54
|
+
### Scroll & navigation
|
|
55
|
+
- **Scroll reveal** — Enters when entering viewport.
|
|
56
|
+
- **Scroll-driven animation** — Progress tied to scroll offset.
|
|
57
|
+
- **Parallax** — Layers move at different rates.
|
|
58
|
+
- **Page transition** — Motion between routes.
|
|
59
|
+
- **View transition** — Browser morph between document states.
|
|
60
|
+
|
|
61
|
+
### Feedback & interaction
|
|
62
|
+
- **Hover effect** — Pointer-over change (web).
|
|
63
|
+
- **Press / Tap feedback** — Brief scale on press.
|
|
64
|
+
- **Hold to confirm** — Fill while held for destructive confirm.
|
|
65
|
+
- **Drag** — Direct manipulation with optional momentum.
|
|
66
|
+
- **Drag to reorder** — List reorder with shifting neighbors.
|
|
67
|
+
- **Swipe to dismiss** — Off-screen drag to close.
|
|
68
|
+
- **Rubber-banding** — Resistance and snap at overscroll edge.
|
|
69
|
+
- **Shake / Wiggle** — Error/reject jitter.
|
|
70
|
+
- **Ripple** — Expanding circle from tap point.
|
|
71
|
+
|
|
72
|
+
### Easing
|
|
73
|
+
- **Easing** — Speed curve over time.
|
|
74
|
+
- **Ease-out** — Fast start, slow end — default for UI response.
|
|
75
|
+
- **Ease-in** — Slow start — usually avoid on UI.
|
|
76
|
+
- **Ease-in-out** — Slow-fast-slow for on-screen travel.
|
|
77
|
+
- **Linear** — Constant speed — spinners, progress.
|
|
78
|
+
- **Cubic-bezier** — Custom curve control points.
|
|
79
|
+
- **Asymmetric easing** — Different accel/decel — livelier than symmetric.
|
|
80
|
+
|
|
81
|
+
### Springs
|
|
82
|
+
- **Spring** — Physics-driven settle vs fixed duration.
|
|
83
|
+
- **Stiffness / Tension** — Pull toward target — higher = snappier.
|
|
84
|
+
- **Damping** — Oscillation decay — lower = more bounce.
|
|
85
|
+
- **Mass** — Heaviness of moving object.
|
|
86
|
+
- **Bounce** — Overshoot then settle.
|
|
87
|
+
- **Perceptual duration** — When motion *feels* done.
|
|
88
|
+
- **Momentum** — Velocity continues after release.
|
|
89
|
+
- **Velocity** — Speed/direction; springs preserve on interrupt.
|
|
90
|
+
- **Interruptible animation** — Retarget mid-flight smoothly.
|
|
91
|
+
|
|
92
|
+
### Looping & ambient
|
|
93
|
+
- **Marquee** — Continuous horizontal scroll loop.
|
|
94
|
+
- **Loop** — Repeating cycle.
|
|
95
|
+
- **Alternate (yoyo)** — Forward then reverse each cycle.
|
|
96
|
+
- **Orbit** — Path around anchor.
|
|
97
|
+
- **Pulse** — Rhythmic scale/opacity attention.
|
|
98
|
+
- **Float** — Gentle vertical drift idle motion.
|
|
99
|
+
- **Idle animation** — Subtle motion while waiting.
|
|
100
|
+
|
|
101
|
+
### Polish & effects
|
|
102
|
+
- **Blur** — Soften or hide transition seams.
|
|
103
|
+
- **Clip-path** — Hard-edge reveal/mask shapes.
|
|
104
|
+
- **Mask** — Soft-edge hide/reveal vs clip-path.
|
|
105
|
+
- **Before / after slider** — Draggable compare wipe.
|
|
106
|
+
- **Line drawing** — SVG stroke draw-on.
|
|
107
|
+
- **Text morph** — Character-wise text change.
|
|
108
|
+
- **Skeleton / Shimmer** — Loading placeholder sheen.
|
|
109
|
+
- **Number ticker** — Rolling digit counter.
|
|
110
|
+
- **Tabular numbers** — Fixed-width digits — stable counters.
|
|
111
|
+
- **Typewriter** — Sequential character reveal.
|
|
112
|
+
|
|
113
|
+
### Performance
|
|
114
|
+
- **Frame rate (FPS)** — 60 baseline; 120 on high-refresh displays.
|
|
115
|
+
- **Jank** — Visible stutter from missed frames.
|
|
116
|
+
- **Dropped frame** — Missed paint deadline hitch.
|
|
117
|
+
- **Compositing** — GPU layer move/fade without layout.
|
|
118
|
+
- **will-change** — Hint upcoming animation for promotion.
|
|
119
|
+
- **Layout thrashing** — Layout-forcing props animated each frame.
|
|
120
|
+
|
|
121
|
+
### Principles
|
|
122
|
+
- **Purposeful animation** — Motion serves orientation/feedback, not filler.
|
|
123
|
+
- **Anticipation** — Small wind-up before main move.
|
|
124
|
+
- **Follow-through** — Secondary motion after main stop.
|
|
125
|
+
- **Squash & stretch** — Deform conveys weight/speed.
|
|
126
|
+
- **Perceived performance** — Motion changes felt speed.
|
|
127
|
+
- **Frequency of use** — More exposure → shorter/subtler motion.
|
|
128
|
+
- **Spatial consistency** — Same identity/path across states.
|
|
129
|
+
- **Hardware acceleration** — transform/opacity on GPU.
|
|
130
|
+
- **Reduced motion** — Honor system preference — gentler, not always off.
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Web animation — build sequence & recipes
|
|
2
|
+
|
|
3
|
+
Construction skill: turn a motion request into implementation that passes review. Not for codebase audits (`reference/review.md`) or RN (`reference/expo.md`). For overlays (toast, drawer, menu) consider `reference/ui-libraries.md` before hand-rolling.
|
|
4
|
+
|
|
5
|
+
## Posture
|
|
6
|
+
|
|
7
|
+
Make the call; one line of reasoning; ship code. Worst failure: animating what should stay instant. Second: right moment, wrong curve, keyframes on a stack, `scale(0)`.
|
|
8
|
+
|
|
9
|
+
## Hard rules
|
|
10
|
+
|
|
11
|
+
1. Run steps 1–2 before tools or curves.
|
|
12
|
+
2. Use table values — no invented beziers.
|
|
13
|
+
3. Extend existing `--ease-*` / duration tokens; do not fork a parallel scale.
|
|
14
|
+
4. Ship reduced-motion and hover gating with the change.
|
|
15
|
+
5. Cheapest tool: CSS fade beats installing Motion.
|
|
16
|
+
|
|
17
|
+
## Build sequence
|
|
18
|
+
|
|
19
|
+
### 1–2. Gate & purpose
|
|
20
|
+
|
|
21
|
+
Same frequency and purpose tables as `SKILL.md`. Keyboard-initiated → stop with instant UI alternative.
|
|
22
|
+
|
|
23
|
+
### 3. Tool (first fit)
|
|
24
|
+
|
|
25
|
+
| Need | Tool |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| Class/attribute toggles | CSS transition |
|
|
28
|
+
| Mount entry, no JS | `@starting-style` |
|
|
29
|
+
| Predetermined motion under load | CSS `@keyframes` / animation |
|
|
30
|
+
| JS control, CSS perf | WAAPI `element.animate()` |
|
|
31
|
+
| Springs, layout, exit, gestures | Motion (`motion.dev`) |
|
|
32
|
+
|
|
33
|
+
### 4. Properties
|
|
34
|
+
|
|
35
|
+
- `transform` + `opacity`; `clip-path` when recipe says so; `height` only for accordions.
|
|
36
|
+
- No `scale(0)` entrances.
|
|
37
|
+
- Trigger-anchored surfaces: `transform-origin: var(--transform-origin)`.
|
|
38
|
+
- `translateY(100%)` = one element height — prefer over px.
|
|
39
|
+
- Motion: full `transform` string, not `x`/`y` shorthands under load.
|
|
40
|
+
|
|
41
|
+
### 5. Easing, duration, springs
|
|
42
|
+
|
|
43
|
+
Follow `SKILL.md` tokens and duration table.
|
|
44
|
+
|
|
45
|
+
Springs when: drag momentum, alive feel, interruptible gesture, decorative pointer tracking.
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
{ type: "spring", duration: 0.5, bounce: 0.2 }
|
|
49
|
+
{ type: "spring", mass: 1, stiffness: 100, damping: 10 }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Bounce 0.1–0.3; reserve visible bounce for dismiss/playful cases.
|
|
53
|
+
|
|
54
|
+
### 6. Interruption & exit
|
|
55
|
+
|
|
56
|
+
Transitions (or springs) for rapid fire; symmetric enter/exit paths for dismiss surfaces; slow deliberate press, fast release (hold-to-confirm pattern).
|
|
57
|
+
|
|
58
|
+
### 7. A11y
|
|
59
|
+
|
|
60
|
+
`prefers-reduced-motion` + `@media (hover: hover) and (pointer: fine)` for hover motion.
|
|
61
|
+
|
|
62
|
+
## Never ship
|
|
63
|
+
|
|
64
|
+
| Avoid | Use |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `transition: all` | Named properties |
|
|
67
|
+
| `scale(0)` enter | `scale(0.95)` + opacity |
|
|
68
|
+
| `ease-in` on UI | ease-out + strong bezier |
|
|
69
|
+
| Keyframes on toasts/toggles | Transitions |
|
|
70
|
+
| Motion x/y under load | `transform` string |
|
|
71
|
+
| Ungated hover | fine-pointer media query |
|
|
72
|
+
|
|
73
|
+
## Recipes
|
|
74
|
+
|
|
75
|
+
Tokens: `--ease-out`, `--ease-in-out`, `--ease-drawer` from sequence above.
|
|
76
|
+
|
|
77
|
+
### Press feedback
|
|
78
|
+
|
|
79
|
+
```css
|
|
80
|
+
.tap-target {
|
|
81
|
+
transition: transform 160ms var(--ease-out);
|
|
82
|
+
}
|
|
83
|
+
.tap-target:active {
|
|
84
|
+
transform: scale(0.97);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Popover / menu / select
|
|
89
|
+
|
|
90
|
+
```css
|
|
91
|
+
.floating-panel {
|
|
92
|
+
transform-origin: var(--transform-origin);
|
|
93
|
+
transition:
|
|
94
|
+
opacity 200ms var(--ease-out),
|
|
95
|
+
transform 200ms var(--ease-out);
|
|
96
|
+
}
|
|
97
|
+
.floating-panel[data-starting-style],
|
|
98
|
+
.floating-panel[data-ending-style] {
|
|
99
|
+
opacity: 0;
|
|
100
|
+
transform: scale(0.95);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Tooltip
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
.hint {
|
|
108
|
+
transform-origin: var(--transform-origin);
|
|
109
|
+
transition:
|
|
110
|
+
transform 125ms var(--ease-out),
|
|
111
|
+
opacity 125ms var(--ease-out);
|
|
112
|
+
}
|
|
113
|
+
.hint[data-starting-style],
|
|
114
|
+
.hint[data-ending-style] {
|
|
115
|
+
opacity: 0;
|
|
116
|
+
transform: scale(0.97);
|
|
117
|
+
}
|
|
118
|
+
.hint[data-instant] {
|
|
119
|
+
transition-duration: 0ms;
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Modal (centered origin)
|
|
124
|
+
|
|
125
|
+
```css
|
|
126
|
+
.dialog {
|
|
127
|
+
transform-origin: center;
|
|
128
|
+
transition:
|
|
129
|
+
opacity 250ms var(--ease-out),
|
|
130
|
+
transform 250ms var(--ease-out);
|
|
131
|
+
}
|
|
132
|
+
.dialog[data-starting-style],
|
|
133
|
+
.dialog[data-ending-style] {
|
|
134
|
+
opacity: 0;
|
|
135
|
+
transform: scale(0.96);
|
|
136
|
+
}
|
|
137
|
+
.scrim {
|
|
138
|
+
transition: opacity 250ms var(--ease-out);
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Drawer
|
|
143
|
+
|
|
144
|
+
```css
|
|
145
|
+
.sheet {
|
|
146
|
+
transform: translateY(0);
|
|
147
|
+
transition: transform 500ms var(--ease-drawer);
|
|
148
|
+
}
|
|
149
|
+
.sheet[data-closed] {
|
|
150
|
+
transform: translateY(100%);
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Toast
|
|
155
|
+
|
|
156
|
+
```css
|
|
157
|
+
.notice {
|
|
158
|
+
opacity: 1;
|
|
159
|
+
transform: translateY(0);
|
|
160
|
+
transition:
|
|
161
|
+
opacity 400ms ease,
|
|
162
|
+
transform 400ms ease;
|
|
163
|
+
|
|
164
|
+
@starting-style {
|
|
165
|
+
opacity: 0;
|
|
166
|
+
transform: translateY(100%);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Fallback mount flag if `@starting-style` unavailable:
|
|
172
|
+
|
|
173
|
+
```jsx
|
|
174
|
+
useEffect(() => { setVisible(true); }, []);
|
|
175
|
+
// data-visible on root
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Accordion
|
|
179
|
+
|
|
180
|
+
```css
|
|
181
|
+
.panel-body {
|
|
182
|
+
overflow: hidden;
|
|
183
|
+
transition:
|
|
184
|
+
height 200ms var(--ease-out),
|
|
185
|
+
opacity 200ms var(--ease-out);
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Measure height in JS — do not animate to `auto` blindly.
|
|
190
|
+
|
|
191
|
+
### Stagger (occasional lists)
|
|
192
|
+
|
|
193
|
+
```css
|
|
194
|
+
.row {
|
|
195
|
+
opacity: 0;
|
|
196
|
+
transform: translateY(8px);
|
|
197
|
+
animation: rise 300ms var(--ease-out) forwards;
|
|
198
|
+
}
|
|
199
|
+
.row:nth-child(2) { animation-delay: 50ms; }
|
|
200
|
+
.row:nth-child(3) { animation-delay: 100ms; }
|
|
201
|
+
.row:nth-child(4) { animation-delay: 150ms; }
|
|
202
|
+
|
|
203
|
+
@keyframes rise {
|
|
204
|
+
to { opacity: 1; transform: translateY(0); }
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
30–80ms between items; never block interaction.
|
|
209
|
+
|
|
210
|
+
### Hold to confirm
|
|
211
|
+
|
|
212
|
+
```css
|
|
213
|
+
.fill-mask {
|
|
214
|
+
clip-path: inset(0 100% 0 0);
|
|
215
|
+
transition: clip-path 200ms var(--ease-out);
|
|
216
|
+
}
|
|
217
|
+
.destructive:active .fill-mask {
|
|
218
|
+
clip-path: inset(0 0 0 0);
|
|
219
|
+
transition: clip-path 2s linear;
|
|
220
|
+
}
|
|
221
|
+
.destructive:active {
|
|
222
|
+
transform: scale(0.97);
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Tab color via clip
|
|
227
|
+
|
|
228
|
+
Duplicate tab row; clip active copy; animate `clip-path` not per-tab color tweens.
|
|
229
|
+
|
|
230
|
+
```css
|
|
231
|
+
.tabs-active-layer {
|
|
232
|
+
clip-path: inset(0 60% 0 20%);
|
|
233
|
+
transition: clip-path 250ms var(--ease-in-out);
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Scroll reveal (marketing only)
|
|
238
|
+
|
|
239
|
+
```css
|
|
240
|
+
.hero-block {
|
|
241
|
+
clip-path: inset(0 0 100% 0);
|
|
242
|
+
transition: clip-path 600ms var(--ease-in-out);
|
|
243
|
+
}
|
|
244
|
+
.hero-block[data-in-view] {
|
|
245
|
+
clip-path: inset(0 0 0 0);
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Once per element (`IntersectionObserver` or Motion `useInView` `{ once: true, margin: "-100px" }`).
|
|
250
|
+
|
|
251
|
+
### Drag dismiss
|
|
252
|
+
|
|
253
|
+
```js
|
|
254
|
+
const elapsed = Date.now() - pointerDownAt;
|
|
255
|
+
const speed = Math.abs(deltaY) / elapsed;
|
|
256
|
+
if (Math.abs(deltaY) >= DISMISS_PX || speed > 0.11) close();
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
```js
|
|
260
|
+
node.style.transform = `translateY(${deltaY}px)`;
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Pointer capture; ignore second touch while dragging; rubber-band past edges; spring settle `{ type: "spring", duration: 0.5, bounce: 0.2 }`.
|
|
264
|
+
|
|
265
|
+
### Crossfade seam blur
|
|
266
|
+
|
|
267
|
+
```css
|
|
268
|
+
.inner {
|
|
269
|
+
transition: filter 200ms ease, opacity 200ms ease;
|
|
270
|
+
}
|
|
271
|
+
.inner.is-swapping {
|
|
272
|
+
filter: blur(2px);
|
|
273
|
+
opacity: 0.7;
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Keep blur < 20px.
|
|
278
|
+
|
|
279
|
+
### WAAPI clip reveal
|
|
280
|
+
|
|
281
|
+
```js
|
|
282
|
+
node.animate(
|
|
283
|
+
[{ clipPath: 'inset(0 0 100% 0)' }, { clipPath: 'inset(0 0 0 0)' }],
|
|
284
|
+
{
|
|
285
|
+
duration: 1000,
|
|
286
|
+
fill: 'forwards',
|
|
287
|
+
easing: 'cubic-bezier(0.77, 0, 0.175, 1)',
|
|
288
|
+
}
|
|
289
|
+
);
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Output
|
|
293
|
+
|
|
294
|
+
Deliver code; then briefly: gate + purpose, tool/properties/curve/duration, what to feel-check (2–5× slow, DevTools frames, device for gestures).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-patterns
|
|
3
|
+
description: SUBORDINATE to the design stack (ui-design, ui-motion, native-ui, ui-mockup). Consult only after the stack has set design direction, and only for four gaps it does not cover - charts and data visualization, form UX patterns, web navigation patterns, and stack implementation guidelines (Vue, Nuxt, React, Next.js, React Native, shadcn/ui, HTML + Tailwind). Never sets visual direction, style, palette, typography or motion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ui-patterns
|
|
7
|
+
|
|
8
|
+
Authority: this skill never sets visual direction. The design stack is the maximum source of truth for design; on any conflict between this file and the stack, the stack wins. Consult it only after the stack has defined direction, and only for the four areas below: charts, forms, web navigation and stack guidelines. Existing project design systems still win for tokens and components.
|
|
9
|
+
|
|
10
|
+
Not here on purpose (the design stack owns it): aesthetic direction, style and palette selection, typography and font pairing, motion and animation, responsive and native iOS/Android adaptation, performance and Core Web Vitals, accessibility audit and hardening, i18n, empty and error states, copywriting, polish.
|
|
11
|
+
|
|
12
|
+
## 1. Charts and data visualization
|
|
13
|
+
|
|
14
|
+
Pick the chart from the data shape, not from looks.
|
|
15
|
+
|
|
16
|
+
| Data type | Best chart | Avoid when | A11y fallback |
|
|
17
|
+
|-----------|-----------|-----------|---------------|
|
|
18
|
+
| Trend over time | Line | Fewer than 4 points (use a stat card); more than 6 series; no time dimension | Dashed/dotted line per series; toggleable data table with timestamps |
|
|
19
|
+
| Compare categories | Bar (horizontal for long labels) | More than 15 categories (use a table); data has a time axis (use line) | Value labels always visible |
|
|
20
|
+
| Part-to-whole | Donut / pie | More than 5 slices; differences under 5%; precise values needed | Stacked bar + percentage table (mandatory) |
|
|
21
|
+
| Correlation / distribution | Scatter / bubble; box plot for groups | Categorical variables; fewer than 20 points; mobile-primary | Shape marker per group; data table (or min/Q1/median/Q3/max table) |
|
|
22
|
+
| Heatmap / intensity | Heat map | Fewer than 20 cells (use bar); exact values needed; no pattern fallback for colorblind users | Numeric overlay on hover/focus; grid table with row/column labels |
|
|
23
|
+
| Funnel / flow | Funnel; Sankey for branching | Non-sequential stages; values not monotonically decreasing; fewer than 3 stages | List of stage + count + drop-off %; keyboard traversal |
|
|
24
|
+
| Performance vs target | Bullet (grid for several KPIs); gauge for a single KPI | No target or benchmark exists | Value and % of target as visible text; live region for real-time updates |
|
|
25
|
+
| Hierarchical | Treemap | More than 3 levels; precise sibling comparison needed | Collapsible tree table as primary view |
|
|
26
|
+
| Real-time streaming | Streaming area / line | Updates less than once a minute (use periodic refresh) | Pause/resume control; current value as large text; freeze under reduced motion |
|
|
27
|
+
| Geographic | Choropleth / bubble map | Region sizes distort comparison (use bar); mobile-primary | Region labels; sortable table by region; keyboard-navigable regions |
|
|
28
|
+
|
|
29
|
+
Rules:
|
|
30
|
+
|
|
31
|
+
- Never encode meaning by color alone: add pattern, shape, line style or direct labels; no red/green-only pairs.
|
|
32
|
+
- Contrast: data marks vs background at least 3:1; data text labels at least 4.5:1.
|
|
33
|
+
- Always show a legend next to the chart; make it toggle series when there are several.
|
|
34
|
+
- Label axes with units and readable, auto-skipped ticks; label time granularity and allow switching when relevant.
|
|
35
|
+
- Direct-label values on small datasets; exact values via tooltip on hover, tap and keyboard focus.
|
|
36
|
+
- Interactive marks (points, bars, slices) are keyboard-focusable and have at least 44pt touch targets.
|
|
37
|
+
- Provide a data table alternative (sortable, with `aria-sort`) and a text summary or `aria-label` stating the key insight.
|
|
38
|
+
- Format numbers, dates and currency with the user's locale.
|
|
39
|
+
- More than 5 categories on a pie becomes a bar; 1000+ points get aggregated or sampled with drill-down.
|
|
40
|
+
- Drill-down keeps a visible back path (breadcrumb of the current level).
|
|
41
|
+
- One question per chart; split dense charts; keep gridlines low-contrast and skip decorative gradients and shadows.
|
|
42
|
+
- Charts reflow on small screens (horizontal bars, fewer ticks) and render readable data immediately; entrance animation respects reduced motion.
|
|
43
|
+
- Every chart has loading (skeleton, not an empty axis frame), empty (message + next step) and error (message + retry) states.
|
|
44
|
+
- Data-heavy products offer CSV export of the underlying data.
|
|
45
|
+
|
|
46
|
+
## 2. Forms and feedback
|
|
47
|
+
|
|
48
|
+
Complements `ui-design harden` (validation, sanitization, double-submit, permission states); use both.
|
|
49
|
+
|
|
50
|
+
- Every input has a visible label; placeholder is never the only label. Group related fields with `fieldset`/`legend`.
|
|
51
|
+
- Mark required fields visibly and with `required` / `aria-required`.
|
|
52
|
+
- Use semantic input types (`email`, `tel`, `number`, `url`) and `autocomplete` tokens so keyboards and autofill work.
|
|
53
|
+
- Password fields have a show/hide toggle.
|
|
54
|
+
- Validate on blur, not on every keystroke; show the error directly below its field, stating cause and fix.
|
|
55
|
+
- Errors are announced: `aria-live` region or `role="alert"`, and the field links to its message via `aria-describedby`.
|
|
56
|
+
- After a failed submit, move focus to the first invalid field. With many errors, add an error summary at the top whose items anchor to each field.
|
|
57
|
+
- Submit shows loading, then success or error; the button stays disabled only while the request is in flight.
|
|
58
|
+
- Toasts never steal focus: announce them with `aria-live="polite"`.
|
|
59
|
+
- Confirm destructive actions and dismissing a modal/sheet with unsaved changes.
|
|
60
|
+
- Offer undo for destructive and bulk actions (for example an "Undo delete" toast) instead of, or in addition to, a confirm.
|
|
61
|
+
- Multi-step flows show a step indicator and allow going back without losing entered data.
|
|
62
|
+
- Read-only is not disabled: read-only stays focusable, selectable and readable; disabled is removed from interaction and carries the semantic attribute.
|
|
63
|
+
|
|
64
|
+
## 3. Web navigation patterns
|
|
65
|
+
|
|
66
|
+
Native navigation (tab bars, app bars, gestures) belongs to `ui-design adapt` (native references) and `native-ui`.
|
|
67
|
+
|
|
68
|
+
- Highlight the current location in every nav (indicator plus weight or color) and set `aria-current="page"`.
|
|
69
|
+
- Back is predictable: restore scroll position, filters and form input; never silently reset the stack or jump home.
|
|
70
|
+
- Key screens and meaningful state (filters, tabs, pagination, selected item) live in the URL so they are deep-linkable and shareable.
|
|
71
|
+
- On client-side route change, move focus to the main content region (or its heading) and update the document title.
|
|
72
|
+
- Use breadcrumbs for hierarchies 3+ levels deep.
|
|
73
|
+
- Do not mix tabs, sidebar and bottom nav at the same hierarchy level; keep nav placement identical across pages.
|
|
74
|
+
- Modals are not for primary navigation flows; if it needs a URL or a back button, it is a page.
|
|
75
|
+
- Keep destructive actions (delete account, logout) visually and spatially separated from normal nav items.
|
|
76
|
+
- When a destination is unavailable, show it disabled with the reason instead of silently hiding it.
|
|
77
|
+
- Adaptive nav: persistent sidebar at 1024px and wider; top bar or bottom nav on small screens; core nav stays reachable from deep pages.
|
|
78
|
+
|
|
79
|
+
## 4. Stack implementation guidelines
|
|
80
|
+
|
|
81
|
+
High-severity implementation rules only (correctness, not look). Detect the stack from the project's `package.json` dependencies and read the matching file; read every file that applies (for example Nuxt + Tailwind).
|
|
82
|
+
|
|
83
|
+
| Stack | Detect in `package.json` | Reference |
|
|
84
|
+
|-------|--------------------------|-----------|
|
|
85
|
+
| Vue | `vue` (without `nuxt`) | `references/stacks/vue.md` |
|
|
86
|
+
| Nuxt / Nuxt UI | `nuxt`, `@nuxt/ui` | `references/stacks/nuxt.md` (also `vue.md`) |
|
|
87
|
+
| React | `react` (without `next` / `react-native`) | `references/stacks/react.md` |
|
|
88
|
+
| Next.js | `next` | `references/stacks/nextjs.md` (also `react.md`) |
|
|
89
|
+
| React Native | `react-native`, `expo` | `references/stacks/react-native.md` |
|
|
90
|
+
| shadcn/ui | `components.json` at the root, `@radix-ui/*` + `class-variance-authority` | `references/stacks/shadcn.md` |
|
|
91
|
+
| HTML + Tailwind | `tailwindcss`, `@tailwindcss/*` | `references/stacks/html-tailwind.md` |
|
|
92
|
+
|
|
93
|
+
## 5. Pre-delivery add-on
|
|
94
|
+
|
|
95
|
+
Run after ui-design's own polish/audit pass; these are the items it does not enforce.
|
|
96
|
+
|
|
97
|
+
- [ ] Clickable elements that are not `<button>`/`<a>` have `cursor: pointer` (and a proper role plus keyboard handler).
|
|
98
|
+
- [ ] Every chart has a visible legend, a non-color encoding, and a table or text-summary fallback.
|
|
99
|
+
- [ ] Forms: visible labels, error below field, errors announced, focus moves to the first invalid field on submit.
|
|
100
|
+
- [ ] Toasts use `aria-live="polite"` and never take focus.
|
|
101
|
+
- [ ] Client-side route changes move focus to main content and update the title; the active nav item is marked.
|
|
102
|
+
- [ ] Meaningful UI state (filters, tabs, pagination) survives reload and back via the URL.
|
|
103
|
+
- [ ] `z-index` values come from a defined scale (tokens), not ad-hoc numbers.
|
|
104
|
+
|
|
105
|
+
Derived from [ui-ux-pro-max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) (MIT).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# HTML + Tailwind — high-severity implementation guidelines
|
|
2
|
+
|
|
3
|
+
Subordinate to the design stack (ui-design first). Implementation correctness only; never visual direction.
|
|
4
|
+
|
|
5
|
+
## Animation
|
|
6
|
+
|
|
7
|
+
- **Limit bounce animations** — Do: Use animate-bounce sparingly on CTAs only · Don't: Multiple bounce animations on page
|
|
8
|
+
|
|
9
|
+
## Z-Index
|
|
10
|
+
|
|
11
|
+
- **Fixed elements z-index** — Do: z-50 for nav z-40 for dropdowns · Don't: Relying on DOM order for stacking
|
|
12
|
+
|
|
13
|
+
## Images
|
|
14
|
+
|
|
15
|
+
- **Lazy loading** — Do: loading='lazy' on images · Don't: All images eager load
|
|
16
|
+
- **Responsive images** — Do: srcset and sizes attributes · Don't: Same large image all devices
|
|
17
|
+
- **SVG explicit dimensions** — Do: <svg class='size-6' width='24' height='24'> · Don't: SVG without explicit dimensions
|
|
18
|
+
|
|
19
|
+
## Forms
|
|
20
|
+
|
|
21
|
+
- **Focus states** — Do: focus:ring-2 focus:ring-blue-500 · Don't: Remove focus outline
|
|
22
|
+
|
|
23
|
+
## Responsive
|
|
24
|
+
|
|
25
|
+
- **Breakpoint testing** — Do: 320 375 768 1024 1280 1536 · Don't: Only test on development device
|
|
26
|
+
|
|
27
|
+
## Buttons
|
|
28
|
+
|
|
29
|
+
- **Touch targets** — Do: min-h-[44px] on mobile · Don't: Small buttons on mobile
|
|
30
|
+
- **Loading states** — Do: disabled + spinner icon · Don't: Clickable during loading
|
|
31
|
+
- **Icon buttons** — Do: aria-label on icon buttons · Don't: Icon button without label
|
|
32
|
+
|
|
33
|
+
## Accessibility
|
|
34
|
+
|
|
35
|
+
- **Screen reader text** — Do: sr-only for hidden labels · Don't: Missing context for icons
|
|
36
|
+
- **Reduced motion** — Do: motion-reduce:animate-none · Don't: Ignore motion preferences
|
|
37
|
+
|
|
38
|
+
## Performance
|
|
39
|
+
|
|
40
|
+
- **Configure content paths** — Do: Use 'content' array in config · Don't: Use deprecated 'purge' option (v2)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Next.js — high-severity implementation guidelines
|
|
2
|
+
|
|
3
|
+
Subordinate to the design stack (ui-design first). Implementation correctness only; never visual direction.
|
|
4
|
+
|
|
5
|
+
## Routing
|
|
6
|
+
|
|
7
|
+
- **Handle errors with error.tsx** — Do: error.tsx with reset function · Don't: try/catch in every component
|
|
8
|
+
|
|
9
|
+
## Rendering
|
|
10
|
+
|
|
11
|
+
- **Use Server Components by default** — Do: Keep components server by default · Don't: Add 'use client' unnecessarily
|
|
12
|
+
- **Mark Client Components explicitly** — Do: Add 'use client' only when needed · Don't: Server Component with hooks/events
|
|
13
|
+
- **Push Client Components down** — Do: Client wrapper for interactive parts only · Don't: Mark page as Client Component
|
|
14
|
+
|
|
15
|
+
## DataFetching
|
|
16
|
+
|
|
17
|
+
- **Fetch data in Server Components** — Do: async function Page() { const data = await fetch() } · Don't: useEffect for initial data
|
|
18
|
+
- **Configure caching explicitly (Next.js 15+)** — Do: Explicitly set cache: 'force-cache' for static data · Don't: Assume default is cached (it's not in Next.js 15)
|
|
19
|
+
|
|
20
|
+
## Images
|
|
21
|
+
|
|
22
|
+
- **Use next/image for optimization** — Do: <Image> component for all images · Don't: <img> tags directly
|
|
23
|
+
- **Provide width and height** — Do: width and height props or fill · Don't: Missing dimensions
|
|
24
|
+
- **Configure remote image domains** — Do: remotePatterns in next.config.js · Don't: Allow all domains
|
|
25
|
+
|
|
26
|
+
## API
|
|
27
|
+
|
|
28
|
+
- **Validate request body** — Do: Zod or similar for validation · Don't: Trust client input
|
|
29
|
+
|
|
30
|
+
## Middleware
|
|
31
|
+
|
|
32
|
+
- **Keep middleware edge-compatible** — Do: Edge-compatible code only · Don't: Node.js APIs in middleware
|
|
33
|
+
|
|
34
|
+
## Environment
|
|
35
|
+
|
|
36
|
+
- **Use NEXT_PUBLIC prefix** — Do: NEXT_PUBLIC_ for client vars · Don't: Server vars exposed to client
|
|
37
|
+
- **Validate env vars** — Do: Validate on startup · Don't: Undefined env at runtime
|
|
38
|
+
- **Use .env.local for secrets** — Do: .env.local gitignored · Don't: Secrets in .env committed
|
|
39
|
+
|
|
40
|
+
## Performance
|
|
41
|
+
|
|
42
|
+
- **Avoid layout shifts** — Do: Skeleton loaders aspect ratios · Don't: Content popping in
|
|
43
|
+
|
|
44
|
+
## Link
|
|
45
|
+
|
|
46
|
+
- **Use next/link for navigation** — Do: <Link href=""> for internal links · Don't: <a> for internal navigation
|
|
47
|
+
|
|
48
|
+
## Security
|
|
49
|
+
|
|
50
|
+
- **Sanitize user input** — Do: Escape sanitize validate all input · Don't: Direct interpolation of user data
|
|
51
|
+
- **Use CSP headers** — Do: Configure CSP in next.config.js · Don't: No security headers
|
|
52
|
+
- **Validate Server Action input** — Do: Validate and authorize in Server Action · Don't: Trust Server Action input
|